--execute immediate 实现DDL
declare
v_ddl varchar2(200);
begin
v_ddl:='create table mytable as select ename,sal from emp';
execute immediate v_ddl;
dbms_output.put_line('mytable表已建');
end;
--execute immediate 返回单行记录
--execute immediate 查询语句 into 行数据类型 using 对应占位符变量
declare
v_id emp.empno%type;
v_emp emp%rowtype;
v_sql varchar2(100);
begin
v_id:=7788;
v_sql:='select * from emp where empno=:id';--id为占位符
execute immediate v_sql into v_emp using v_id;
dbms_output.put_line(v_emp.ename||' '||v_emp.sal);
end;
--异常处理
declare
v_name emp.ename%type;
begin
select ename into v_name from emp where empno=&emp_no;
dbms_output.put_line('员工姓名:'||v_name);
exception
when no_data_found then
dbms_output.put_line('无记录返回');
end;
--系统预定义异常处理
--异常名称 描述
--ACCESS_INTO_NULL 未初始化对象
--CURSOR_ALREADY_OPEN 试图打开已经打开的游标
--ZERO_DIVIDE 除数为零
--NO_DATA_FOUND 无返回记录
--INVALID_NUMBER 字符串转换为数字失败
--VALUE_ERROR 转换、截断、大小约束错误
--TOO_MANY_ROWS 执行select into语句返回多行记录
--OTHERS 其他异常
--自定义异常处理
exception
when 异常名1 then
异常处理语句段1;
when 异常名2 then
异常处理语句段2;
动态sql语句 异常处理
最新推荐文章于 2023-12-28 10:30:10 发布