PL/SQL 编程
for update [of] [columnName]
PL/SQL 块包括 :变量/异常声明块、代码执行块、异常处理块
基本格式如下:
DECLARE
[变量/异常声明块];
BEGIN
[代码执行块]
[EXCEPTION
[异常处理块]
]
END;
- 声明变量和常量的语法
Identifier [CONSTANT] DataType [NOT NULL] [:= | DEFAULT expr];
如:relt number(5) default 5;
relt constant number(4) := 3;
- 给变量赋值的方式
使用赋值语句 :=
如: [VariableName] [DataType] := [value];
[VariableName] := [value];
使用 SELECT INTO 语句
如:select [A ColumnName] into [A VariableName] from [TableName] where [Conditions]; --要求返回值必须是单行单列的值
3. LOB 数据类型
DBMS_LOB.READ(clob_var,amount,offset,output_var);
clob_var 存放CLOB数据的变量
output_var 用于存放从CLOB变量中截取出的值
amount 要读取的字符数
offset (相对起始位置)偏移量
- 关于 %TYPE 与 %ROWTYPE 的使用
%TYPE 引用变量和数据库列的数据类型
%ROWTYPE 提供表示表中一行的记录类型
如: variable Table.Column%TYPE;
rowvariable Table%ROWTYPE;
- 关于逻辑比较
= <> != < > <= >=
- 条件控制语句
- IF
if [Condition expr] then
elif
[Commands]
...
else
[Commands]
end if;
- CASE
case '&variable'
when [value] then
[Commands];
...
else
[Commands];
end case;
- 循环控制语句
- LOOP 无条件循环
loop
[Commands];
end loop;
- WHILE 根据条件循环
while [Condition expr] loop
[Commands];
end loop;
- FOR 循环固定的次数
for [variable] in [reverse] [variable array | value1..value2] loop
[Commands];
end loop;
- 顺序控制语句
- GOTO 无条件跳转
BEGIN
<<FLAG>>
[Commands];
goto QUIT;
goto FLAG;
<<QUIT>>
NULL;
END;
- NULL 空语句
在任何语句块都可使用 NULL; 来充当一条语句
- 动态 SQL
指在PL/SQL程序执行时生成的SQL语句,编译程序对动态SQL不做处理,而是在程序运行时动态构造语句、对语句进行语法分析并执行。
DDL 语句命令和会话控制语句不能在PL/SQL中直接使用,但是可以通过动态SQL来执行。
基本语法如下:
EXECUTE IMMEDIATE dynamic_sql_string
[INTO define_variable_list]
[USING bind_argument_list];
-- list中有多个变量,用 ',' 分隔
如:
declare
sql_str varchar2(100);
sid student.sid%type;
sname student.sname%type;
begin
sid := '&sid';
sname := '&sname';
execute immediate 'insert into student(sid,sname) values(:sid,:sname)' using sid,sname;
commit;
end;
--以上SQL语句中 values() 里的 ‘:sid’ 表示的是一个变量(‘sid’是变量名,该变量名可随意,但不可省略),该变量的值顺序对应 using 后跟着参数列表里的值。
10. 异常
在运行程序时出现的错误叫做异常,发生异常后,将停止执行,控制权转移到PL/SQL块的异常处理部分。
抛出异常的方式:
-使用 RAISE 关键字
异常有两种类型:预定义异常、用户定义异常
-预定义异常
TOO_MANY_ROWS 等
-用户定义异常
定义异常的方式与定义变量的方式相同
exceptionname EXCEPTION; --EXCEPTION 是异常类型
如:
myexception EXCEPTION;
其他:
others 表示其他异常,必须用于所有异常处理的结尾(即最后一个异常处理)
sqlerrm 表示异常信息
例子:
declare
myexception exception;
otherexception exception;
begin
-- raise myexception;
raise otherexception;
exception
when myexception then
dbms_output.put_line('get a exception !');
when others then
dbms_output.put_line('get a other exception !');
end;
- 引发程序错误
RAISE_APPLICATION_ERROR(error_number,error_message);
-用于创建用户定义的错误信息
-可以在可执行部分和异常处理部分使用
-错误编号必须介于 -20000 和 -20999 之间
-错误消息的长度可长达 2048 个字节