Skip to content

DBMS_SQL概述

功能

DBMS_SQL包提供一个接口,用于执行动态SQL(包括DDL和DML)。

DBMS_SQL定义了一个实体游标ID,游标ID是一个PL/SQL整型数,通过游标ID,可以对游标进行操作。存储过程或触发器里的SQL语句需要动态生成时,使用DBMS_SQL包执行动态SQL语句。

DBMS_SQL包在整个程序设计/使用过程中,对游标的操作切不可有省略的部分,一旦省略其中某一步骤,则程序编译过程会失败,如在程序结尾处未对该游标进行关闭操作,则在再次调用过程时会出现错误。

DBMS_SQL除了可以完成静态sql在过程中的工作外,还能执行create等DDL操作,不过在执行该类操作时应首先显式赋予执行用户相应的系统权限,比如create table等。

使用DBMS_SQL应遵循必要的操作过程,常见的过程如下:

  • 对于一般的select操作,如果使用动态的SQL语句则需要进行以下几个步骤: open cursor > parse > define column > excute > fetch rows > close cursor

  • 对于DML操作(insert、update)则需要进行以下几个步骤: open cursor > parse > bind variable > execute > close cursor

  • 对于delete操作只需要进行以下几个步骤: open cursor > parse > execute > close cursor

接口/方法

接口/方法功能
BIND_VARIABLE若SQL语句中存在参数,则进行参数绑定,给参数赋值
CLOSE_CURSOR关闭并释放游标
COLUMN_VALUE从缓存区中一行行读取行结果,根据字段号取行中对应的字段数据,并放入指定变量中
DEFINE_COLUMN定义SQL查询语句的目标变量,并检查目标变量(输入)与结果字段(表的数据输出)是否可转换
EXECUTE执行游标对应的SQL语句
FETCH_ROWS用来抓取结果集的行数据,将结果集放入缓存区中
IS_OPEN判断游标是否打开
OPEN_CURSOR从游标数组(100个)中找到空闲游标,标记打开,返回空闲游标编号
PARSE根据输入的SQL语句进行SQL解析和规划
STROF_CURSOR打印输出游标的状态、内部对象地址、SQL语句、参数信息、结果集字段信息