1 概述
1. 作用:在 pl/sql 中执行 '立即执行 sql 语句'
(1) 比如:咱常常在 Oracle 语法中可以直接执行 update、insert、delete 操作
但,在 pl/sql 语法中,是 '不能直接' 同在 Oracle 这样操作的
(2) 为了解决此类问题,引入了 execute immediate(立即执行)
2. 以下效果等同
(1) Oracle 语法:update table_name set column_name = 1 where column_name = 2;
(2) pl/sql 语法:execute immediate '上述 sql';
3. 可以同动态 sql 连用
(1) execute immediate <sql> using <:b1, :b2>;
2 示例
基础数据准备:
create table stu_info (
sno number(3),
sname varchar2(30)
);
insert into stu_info(sno, sname) values(1, '瑶瑶');
insert into stu_info(sno, sname) values(2, '优优');
commit;
示例:ddl 语句 + dml 语句
DECLARE
v_sql VARCHAR2(200);
v_sname stu_info.sname%TYPE;
v_num PLS_INTEGER;
BEGIN
-- 用法1 : ddl 语句
v_sql := 'create or replace view vw_stu_info as select sno, sname from stu_info';
EXECUTE IMMEDIATE v_sql;
-- 用法2 :dml 语句 + 动态 sql
v_sql := 'insert into stu_info(sno, sname) values(:b1, :b2)';
EXECUTE IMMEDIATE v_sql
USING 3, '倩倩';
-- 用法3:赋值给某个变量
v_sql := 'select count(1) from stu_info';
EXECUTE IMMEDIATE v_sql
INTO v_num;
dbms_output.put_line('总记录条数:' || v_num);
-- 记得 commit(同 Oracle 语法)
COMMIT;
END;