DBMS_SQL 系统包提供了一套执行动态语句的机制,支持多种语句:系统命令(如 ALTER SESSION)、DDL、DML(包括 SELECT)等。
使用注意事项如下:
只有 DML 语句可以指定参数。
DML 语句中只有返回结果集的语句可以被获取。
DML 语句在
dbms_sql.execute
等接口中执行,其它语句在dbms_sql.parse
接口中执行。DBMS_SQL 创建的游标只在当前 session 可用,其它 session 无法访问。
DBMS_SQL 安全模型
DBMS_SQL 为 SYS 用户所有,是由 AUTHID CURRENT_USER 编译的系统包。从匿名 PL 块调用的任何 DBMS_SQL 子程序都以当前用户的权限运行。
DBMS_SQL 常量
下表为 DBMS_SQL 的 PARSE 存储过程的 language_ flag
参数所使用的常量。
名称 | 类型 | 值 | 描述 |
---|---|---|---|
NATIVE | INTEGER | 1 | 程序正常连接数据库 |
使用说明
以下使用说明描述了如何处理查询、更新、插入和删除。
如果使用动态 SQL 处理查询,则必须执行以下步骤:
通过调用 DEFINE_COLUMN 子程序指定 SELECT 语句返回值的变量。
通过调用 EXECUTE 函数来运行 SELECT 语句。
调用 FETCH_ROWS 函数检索满足查询的行。
调用 COLUMN_VALUE 子程序来确定 FETCH_ROWS 函数返回的查询检索的列值。
如果使用动态 SQL 处理 INSERT、UPDATE 或者 DELETE,则必须通过调用 EXECUTE 函数运行 INSERT、UPDATE 或 DELETE 语句。
DBMS_SQL 执行流程
DBMS_SQL 执行流程如下:
OPEN_CURSOR
PARSE
BIND_VARIABLE
DEFINE_COLUMN
EXECUTE
FETCH_ROWS
COLUMN_VALUE
CLOSE_CURSOR
DBMS_SQL 子程序概览
下表列出了 OceanBase 数据库当前版本所支持的 DBMS_SQL 子程序和简要描述。
子程序 | 描述 |
---|---|
将指定值绑定到指定变量。 | |
返回游标中指定元素的值。 | |
关闭指定光标并释放内存。 | |
定义通过指定游标选取的列,仅与 SELECT 语句一起使用。 | |
执行指定的游标。 | |
从指定游标中获取某行数据。 | |
返回新建游标的 ID 号。 | |
解析指定的语句。 |