动态SQL:是在运行时产生和执行SQL语句的编程方法。
在下列情况下动态SQL是非常有用的:
n 编写像ad hoc查询系统一样的通用目的的和灵活的应用程序。
n 编写必须运行DDL语句的应用程序
n 在编译时并不知道SQL语句的全部文本
n 在编译时并不知道输入、输出变量的个数和类型
PL/SQL提供了2种方法来写动态SQL:
n 本地动态SQL:是PL/SQL语言建立和运行动态SQL的功能。
n DBMS_SQL包:是建立、运行和描述动态SQL语句的API。
本地动态SQL的代码相对于等效的DBMS_SQL包代码更容易阅读和书写,并且运行明显要快(尤其是能被编译器优化时)。然而为了输入本地动态SQL代码,你必须在编译时知道动态SQL语句输入、输出变量的个数和类型。如果在编译时不知道这些信息,就必须使用DBMS_SQL包。
当你同时需要DBMS_SQL包和本地动态SQL,可以使用DBMS_SQL.TO_REFCURSOR()和DBMS_SQL.TO_CURSOR_NUMBER()函数在它们之间进行转换。
n 在编译时不知道SQL的全部文本。例,一个查询语句在编译时包含一个未知的标识符(如表名)或在编译时一个WHERE子句中的subclauses的个数不确定。
n 静态SQL不支持的SQL语句
如果不需要动态SQL,则可以使用静态SQL,有如下好处:
n 成功地编译可以验证静态SQL引用有效的数据库对象,并且具有需要的权限来访问这些对象。
n 成功地编译可以创建方案对象依赖。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1123727/ ,如需转载,请注明出处,否则将追究法律责任。