动态SQL语句的语法

来源:互联网 发布:苹果电脑的制图软件 编辑:程序博客网 时间:2024/06/06 07:37

动态SQL是在运行时生成和执行SQL语句编程方法。动态是和静态相对而言的。静态SQL指的是在代码编译时刻就已经包含在代码中的那些已经充分明确的固定的SQL语句。

PL/SQL提供两种方式来编写动态SQL

  • 本地动态SQL,一个PL/SQL语言结构用于构建和指定动态SQL语句。
  • DBMS_SQL包,一个API用户构建、执行和描述动态SQL语句。

本地动态SQL代码比同等代码使用DBMS_SQL包更容易读和写,运行数据更快。然而,编写本地动态SQL,你必须知道在运行时动态SQL语句的输入和输出的变量类型和数量。如果在运行你不知道这种信息,就必须使用DBMS_SQL包。

下面主要介绍本地动态SQL语句的语法。

 

1.EXECUTE IMMEDIATE语句

 1.1语法

execute_immediate_statement ::=

 

into_clause ::=

 

bulk_collect_into_clause ::=

 

using_clause ::=

 

dynamic_returning_clause ::=

 

 

into_clause ::=

 

bulk_collect_into_clause ::=

 

 

1.2关键字和参数描述

  • bind_argument 

 一个传递到动态SQL语句的表达式值(IN绑定),或是一个存储动态SQL语句返回值的变量(OUT绑定)。

  •  BULK COLLECT INTO

如果使用仅当动态SQL语句可以返回多行,此子句指定一个或多个集合存储返回行。该子句必须有一个相应的兼容型集合或数组来存储动态SQL语句的查询列。

  •  collection_name

一个声明的集合,用来存储动态SQL语句返回行。

  • dynamic_returning_clause

如果使用仅当动态SQL语句有 RETURNING INTO子句,这个子句返回动态SQL语句受影响行的列值,独立变量或记录。该子句可以包括OUT绑定参数。

  •  dynamic_sql_stmt

一个字符串常量,字符串变量,或表示SQL语句的字符串表达式,必须是CHAR、VARCHAR2或者CLOB类型。

  • host_array_name

返回行数组进行存储,该数组必须声明一个PL / SQL主机环境中,并传递给PL/ SQL绑定参数(冒号(:)前缀) 

  • IN, OUT, IN OUT

绑定参数的参数模式,IN绑定参数传递值到动态SQL语句,OUT绑定参数存储动态SQL语句返回值。IN OUT绑定参数传递初始值到动态SQL语句,并存储动态SQL语句返回值。默认绑定参数的参数模式是IN。

  • INTO

当且仅当动态SQL语句是一个SELECT语句,最多可以返回一行。此子句指定变量或记录存储返回行的列值。对于每个动态SQL语句查询列,必须有相应的自定义变量兼容类型和记录兼容类型。

  • record_name

存储返回行的用户自定或%rowtype记录。

  • USING

当且仅当动态SQL语句包含占位符,指定绑定参数列表。

 

使用事项:

对于有 RETURNING子句的DML语句,你可以把OUT绑定参数放到 RETURNING INTO 子句中,无需指定参数模式。如果同时使用USING子句和 RETURNING INTO 子句,USING子句只能包含IN参数。

绑定参数值不能是布尔字面量(TRUE,FALSE,NULL)。如果想要传递NUL值到动态SQL,可以使用未初始化变量。

 

2.OPEN FOR语句

 OPEN-FOR语句执行游标变量相关的SELECT语句。

 

2.1.语法

open_for_statement ::=

 

using_clause ::=

2.2.关键字和参数描述

  • cursor_variable_name

当前作用域内已申明的游标变量或者无返回类型的游标参数。

  • host_cursor_variable_name

必须在PL/SQL主机环境已被申明,并通过PL/SQL作为绑定参数的游标变量。游标变量的数据里类型必须兼容任何PL/SQL游标变量的返回类型。

  • select_statement

一个字符串常量,字符串变量,或字符串表达式,表示多行的SELECT语句(不包括最后的分号)与cursor_variable_name相关。它必须是类型为CHAR,VARCHAR2,CLOB(NCHAR或NVARCHAR2)。

  • dynamic_string

一个字符串常量,字符串变量,或字符串表达式,表示任何SQL语句。它必须是类型为CHAR,VARCHAR2,CLOB。、

  • USING

当且仅当select_statment包括占位符,此子句指定绑定参数列表。

  • bind_argument

一个传递到动态SQL语句的表达式值(IN绑定),或是一个存储动态SQL语句返回值的变量(OUT绑定)。默认绑定参数模式是IN。