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 处理查询,则必须执行以下步骤:

  1. 通过调用 DEFINE_COLUMN 子程序指定 SELECT 语句返回值的变量。

  2. 通过调用 EXECUTE 函数来运行 SELECT 语句。

  3. 调用 FETCH_ROWS 函数检索满足查询的行。

  4. 调用 COLUMN_VALUE 子程序来确定 FETCH_ROWS 函数返回的查询检索的列值。

如果使用动态 SQL 处理 INSERT、UPDATE 或者 DELETE,则必须通过调用 EXECUTE 函数运行 INSERT、UPDATE 或 DELETE 语句。

DBMS_SQL 执行流程

DBMS_SQL 执行流程如下:

  1. OPEN_CURSOR

  2. PARSE

  3. BIND_VARIABLE

  4. DEFINE_COLUMN

  5. EXECUTE

  6. FETCH_ROWS

  7. COLUMN_VALUE

  8. CLOSE_CURSOR

DBMS_SQL 子程序概览

下表列出了 OceanBase 数据库当前版本所支持的 DBMS_SQL 子程序和简要描述。

子程序

描述

BIND_VARIABLE

将指定值绑定到指定变量。

COLUMN_VALUE

返回游标中指定元素的值。

CLOSE_CURSOR

关闭指定光标并释放内存。

DEFINE_COLUMN

定义通过指定游标选取的列,仅与 SELECT 语句一起使用。

EXECUTE

执行指定的游标。

FETCH_ROWS

从指定游标中获取某行数据。

OPEN_CURSOR

返回新建游标的 ID 号。

PARSE

解析指定的语句。