PARSE 存储过程用于解析一条 DML 语句(含 SELECT )或执行 DDL、系统命令等其它语句。

PARSE 子程序有以下多种版本:

  • 支持 VARCHAR2 类型的参数。

  • 支持 VARCHAR2A 和 VARCHAR2S 类型的参数。以数组里分段的字符串为例,PARSE 存储过程会把这个数组里面的字符串,拼接成一个 SQL 进行解析。

语法

  1. DBMS_SQL.PARSE(cursor_id IN INTEGER,
  2. sql_stmt IN VARCHAR2,
  3. language_flag IN INTEGER);
  1. DBMS_SQL.PARSE(cursor_id IN INTEGER,
  2. sql_stmt IN VARCHAR2A,
  3. lb IN INTEGER,
  4. ub IN INTEGER,
  5. lfflg IN BOOLEAN,
  6. language_flag IN INTEGER);
  1. DBMS_SQL.PARSE(cursor_id IN INTEGER,
  2. sql_stmt IN VARCHAR2s,
  3. lb IN INTEGER,
  4. ub IN INTEGER,
  5. lfflg IN BOOLEAN,
  6. language_flag IN INTEGER);

参数解释

参数

解释

cursor_id

用来解析该语句或数组的游标 ID 号。

sql_stmt

要解析的 SQL 语句或数组。

lb

数组索引下限。

ub

数组索引上限。

lfflg

如果值为 TRUE,则在每个级联的元素之后插入换行符。

language_flag

指定 SQL 语句的行为。

使用说明

  • 使用 DBMS_SQL 动态运行 DDL 语句可能导致程序停止响应。例如,对包中子程序的调用导致包被锁定,直到执行返回到用户端。任何导致冲突的锁操作(例如在释放第一个锁之前尝试删除包)都会使程序无法运行。

  • 由于客户端代码无法引用远程程序包变量或常量,因此必须显式使用常量的值。例如,以下代码无法在客户端上编译:

  1. DBMS_SQL.PARSEcur_hdlstmt_strDBMS_SQL.NATIVE);
  2. --使用了常量 DBMS_SQL.NATIVE

以下代码在客户端上有效,因为已显式提供了参数:

  1. DBMS_SQL.PARSEcur_hdlstmt_str1);
  2. --在客户端上编译

异常情况

如果使用具有编译警告的 DBMS_SQL 创建类型、程序、函数或包,则会引发报错,并且仍会创建 PL 单元。