1.动态 SQL
动态 SQL 是指在PL/SQL程序执行时生成的 SQL 语句
编译程序对动态 SQL 不做处理,而是在程序运行时动态构造语句、对语句进行语法分析并执行
DDL 语句命令和会话控制语句不能在 PL/SQL 中直接使用,但是可以通过动态 SQL 来执行
执行动态 SQL 的语法:
EXECUTE IMMEDIATE dynamic_sql_string
[INTO define_variable_list]
[USING bind_argument_list];
execute immediate 字符串参数 [into] 变量 using 参数
immediate后面跟的参数:它是一个字符串类型的sql语句,或者字符串类型的plsql代码
into 变量:是把sql语句的执行结果保存到变量中
using 参数:传给sql语句的参数
2.异常
1.异常概述
在运行程序时出现的错误叫做异常
发生异常后,语句将停止执行,控制权转移到 PL/SQL 块的异常处理部分
declare
声明部分;
begin
plsql代码块;
exception
异常处理部分;
end;
ORACLE异常分为两种类型:系统异常、自定义异常。其中系统异常又分为:预定义异常和非预定义异常。
2.预定义异常
就是Oracle已经事先定好的异常编号与异常名字。
3.非预定义异常
ORACLE为它定义了错误编号,但没有定义异常名字。我们使用的时候,先声名一个异常名,通过伪过程PRAGMA EXCEPTION_INIT,将异常名与错误号关联起来。
如:
pragma exception_init(自定义的异常,编号);
insert into emp(empno,deptno) values(7369,10);
declare
--声名异常变量
myexc exception;
--绑定异常
pragma exception_init(myexc,-00001);
begin
begin
insert into emp(empno,deptno) values(7369,10);
-- commit;
exception
when myexc then
-- rollback;
dbms_output.put_line('违反唯一约束');
end;
dbms_output.put_line('-----');
end;
4.自定义异常
程序员从业务角度出发,制定的一些规则和限制。
异常名称 exception;
抛出异常:
raise 异常名称
declare
--定义一个自己的异常
myexcp exception;
--声名两个变量接收两个数
m number(10):=&m;
n number(10):=&n;
begin
if n=0 then
dbms_output.put_line('除数不能为零');
raise myexcp;
end if;
dbms_output.put_line(m/n);
end;