PL/SQL-->动态SQL的常见错误
动态SQL在使用时,有很多需要注意的地方,如动态SQL语句结尾处不能使用分号(;),而动态PL/SQL结尾处需要使用分号(;),但不能使用正
斜杠结尾(/),以及schema对象不能直接作为变量绑定。本文介绍了动态SQL的常见问题。
一、演示动态SQL的使用
下面的示例中,首先使用动态SQL基于scott.emp创建表tb2,然后直接使用动态SQL从新表中获取记录数并输出。再接下来是定义了一个动态PL/SQL代码并执行以获取当前的系统时间,最后使用动态SQL对新表进行更新。
DECLARE
--定义变量以及给变量设定初始值
sql_stmt
VARCHAR2(100);
plsql_block
VARCHAR2(300);
v_deptno
NUMBER := 30;
v_count
NUMBER;
v_new_sal
VARCHAR2(5);
v_empno
NUMBER := 7900;
BEGIN
sql_stmt := 'CREATE TABLE tb_emp ' ||
--为变量赋值,生成动态SQL语句
'AS SELECT * FROM scott.emp WHERE deptno = ' || v_deptno;
EXECUTE IMMEDIATE sql_stmt;
--执行动态SQL语句
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM tb_emp' --直接使用EXECUTE IMMEDIATE后跟动态SQL串获得新表的记录数
INTO v_count;
DBMS_OUTPUT.PUT_LINE('The employee count is : ' || v_count);
plsql_block := 'DECLARE ' ||
斜杠结尾(/),以及schema对象不能直接作为变量绑定。本文介绍了动态SQL的常见问题。
一、演示动态SQL的使用