本地动态SQL可以使用EXECUTE IMMEDIATE语句处理大多数的动态SQL语句。
如果动态SQL语句是一个返回多行结果的SELECT语句,本地动态SQL给你如下选择:
n 使用带BULK COLLECT INTO子句的EXECUTE IMMEDIATE子句。
n 使用OPEN FOR、FETCH和CLOSE语句。
SQL光标属性在本地动态SQL INSERT、UPDATE、DELETE和单行SELECT语句之后,与静态SQL的对应部分执行相同的工作。
EXECUTE IMMEDIATE语句是本地动态SQL处理大多数动态SQL语句的方法。
如果动态SQL语句是自包含的(即没有绑定变量占位符,唯一能够返回的结果就是错误),则EXECUTE IMMEDIATE不需要子句。
如果动态SQL语句包含绑定变量占位符,则每一个占位符必须在EXECUTE IMMEDIATE语句的适当子句中有对应的绑定变量:
n 如果动态SQL语句为最多返回一行的SQL语句,则使用INTO子句绑定输出变量,使用USING子句绑定输入变量。
n 如果动态SQL语句是返回多行结果的SELECT语句,则使用BULK COLLECT INTO子句定义定义输出变量,使用USING子句定义输入变量。
n 如果是没有RETURNING INTO子句的DML语句,而不是SELECT,则将所有的绑定变量放在USING子句中
n 如果是带有RETURNING INTO子句的DML语句,则将输入绑定变量放在USING子句中,将输出绑定变量放在RETURNING INTO子句中。
n 如果是一个匿名块或一个CALL语句,则将所有绑定变量放在USING子句中。
n 如果动态SQL语句会调用一个子程序要确保:
u 对应于子程序参数占位符的每一个绑定变量与子程序具有相同的参数传递模式,数据类型要与子程序参数类型兼容。(参考练习7-1)
u 不要有有SQL不支持类型的绑定变量。(如BOOLEAN,参考练习07-02)
USING子句不能包括文本NULL, 需要使用NULL的地方使用一个未初始化的变量。(参考练习07-03)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1123728/ ,如需转载,请注明出处,否则将追究法律责任。