PARSE 存储过程用于解析一条 DML 语句(含 SELECT )或执行 DDL、系统命令等其它语句。
PARSE 子程序有以下多种版本:
支持 VARCHAR2 类型的参数。
支持 VARCHAR2A 和 VARCHAR2S 类型的参数。以数组里分段的字符串为例,PARSE 存储过程会把这个数组里面的字符串,拼接成一个 SQL 进行解析。
语法
DBMS_SQL.PARSE(cursor_id IN INTEGER,
sql_stmt IN VARCHAR2,
language_flag IN INTEGER);
DBMS_SQL.PARSE(cursor_id IN INTEGER,
sql_stmt IN VARCHAR2A,
lb IN INTEGER,
ub IN INTEGER,
lfflg IN BOOLEAN,
language_flag IN INTEGER);
DBMS_SQL.PARSE(cursor_id IN INTEGER,
sql_stmt IN VARCHAR2s,
lb IN INTEGER,
ub IN INTEGER,
lfflg IN BOOLEAN,
language_flag IN INTEGER);
参数解释
参数 | 解释 |
---|---|
cursor_id | 用来解析该语句或数组的游标 ID 号。 |
sql_stmt | 要解析的 SQL 语句或数组。 |
lb | 数组索引下限。 |
ub | 数组索引上限。 |
lfflg | 如果值为 TRUE,则在每个级联的元素之后插入换行符。 |
language_flag | 指定 SQL 语句的行为。 |
使用说明
使用 DBMS_SQL 动态运行 DDL 语句可能导致程序停止响应。例如,对包中子程序的调用导致包被锁定,直到执行返回到用户端。任何导致冲突的锁操作(例如在释放第一个锁之前尝试删除包)都会使程序无法运行。
由于客户端代码无法引用远程程序包变量或常量,因此必须显式使用常量的值。例如,以下代码无法在客户端上编译:
DBMS_SQL.PARSE(cur_hdl,stmt_str,DBMS_SQL.NATIVE);
--使用了常量 DBMS_SQL.NATIVE
以下代码在客户端上有效,因为已显式提供了参数:
DBMS_SQL.PARSE(cur_hdl,stmt_str,1);
--在客户端上编译
异常情况
如果使用具有编译警告的 DBMS_SQL 创建类型、程序、函数或包,则会引发报错,并且仍会创建 PL 单元。