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语句、参数信息、结果集字段信息 |