在PL/SQL程序开发中,可以使用DML语句和事务控制语句,但是还有很多语句(比如DDL语句)不能直接在PL/SQL中执行。这些语句可以使用动态SQL来实现。

    PL/SQL块先编译然后再执行,动态SQL语句在编译时不能确定,只有在程序执行时把SQL语句作为字符串的形式由动态SQL命令来执行。在编译阶段SQL语句作为字符串存在,程序不会对字符串中的内容进行编译,在运行阶段再对字符串中的SQL语句进行编译和执行,动态SQL的语法是:

    语法格式:动态SQL

    EXECUTE IMMEDIATE 动态语句字符串
    [INTO 变量列表]
    [USING 参数列表]

    语法解析:
    如果动态语句是SELECT语句,可以把查询的结果保存到INTO后面的变量中。如果动态语句中存在参数,USING为语句中的参数传值。
    动态SQL中的参数格式是:[:参数名],参数在运行时需要使用USING传值。

    【例】在过程中复制EMP表

    1. BEGIN
    2. EXECUTE IMMEDIATE'CREATE TABLE YYY AS SELECT * FROM EMP';
    3. END;