PL/SQL编程
过程化SQL语言,把SQL通过流程控制实现更高效,更灵活
更可控制的特点。
PL/SQL的程序块结构
DECLARE
--变量、常量、游标、用户定义异常的声明
BEGIN
--SQL语句和PL/SQL语句构成的执行程序
EXCEPTION
--程序出现异常时,捕捉并处理
END;
注意事项
DECLARE,BEGIN,EXCEPTION后面没有分号,而END以及
所有SQL语句,PL/SQL语句必须以分号结束
PL/SQL的变量
定义变量 在声明部分
变量名 变量类型[NOT NULL(可选,非空)] := 变量值
变量命名规则和java类似,作用域是所在结构块
变量赋值
1、变量名 := value
2、select key INTO 变量名 from table where 条件
注意, 1、只能有一条记录
2、INTO必须在select中
3、INTO的类型必须匹配
4、INTO的变量数和select的变量数必须相同
逻辑控制
1、条件控制
IF
IF 条件 THEN
--代码块
END IF;
IF THEN ELSE
IF 条件 THEN
--代码块
ELSE
--代码块
END IF;
IF THEN ELSIF
IF 条件 THEN
--代码块
ELSIF 条件 THEN
--代码块
ELSE
--代码块
END IF;
SWITCH
CASE 值
WHEN 表达式 THEN
--代码
WHEN 表达式 THEN
--代码
ELSE
--代码
END CASE;
或
CASE
WHEN 表达式 = 值 THEN
--代码
WHEN 表达式 = 值 THEN
--代码
ELSE
--代码
END CASE;
2、循环控制
LOOP
LOOP
--代码块
EXIT [WHEN 条件]
END LOOP;
FOR
FOR 循环变量 IN 循环开始..循环结束 LOOP
--代码块
END LOOP
WHILE
WHILE 条件
--语句
END LOOP;
异常处理
异常的语法结构
EXCEPTION
WHEN 异常1 THEN
--代码
WHEN 异常1 THEN
--代码
WHEN OTHES THEN
--代码
END
常见预定义异常
NO_DATA_FOUND 没有返回数据时执行select..into
TOO_MANY_ROWS 返回多条数据是执行select..into
DUP_VAL_ON_INDEX 违反唯一约束
INVALID_NUMBER 非数字转数字异常
CUNSOR_ALREADY_OPEN 已打开的游标再次OPEN
自定义异常
在DECLARE部分声明定义异常
在代码中用RAISE抛出
在EXCEPTION中捕获处理
//===========示例==================
DECLARE
exception1 EXCEPTION
BEGIN
RAISE exception1
EXCEPTION
WHEN exception1 THEN
--代码
END;