DBMS_SQL

DBMS_SQL封装过程中的主要函数:
1、OPEN_CURSOR:返回新游标的ID值
2、PARSE:解析要执行的语句
3、BIND_VARIABLE:将给定的数量与特定的变量相连接
4、DEFINE_COLOUMN:定义字段变量,其值对应于指定游标中某个位置元素的值 (仅用于SELECT语句)
5、EXECUTE:执行指定的游标
6、EXECUTE_AND_FETCH:执行指定的游标并取记录
7、FETCH_ROWS:从指定的游标中取出记录
8、COLUMN_VALUE:返回游标中指定位置的元素
9、IS_OPEN:当指定的游标状态为OPEN时返回真值
10、CLOSE_CURSOR:关闭指定的游标并释放内存
11、LAST_ERROR_POSITION:返回出错SQL语句的字节偏移量
12、LAST_ROW_ID:返回最后一条记录的ROWID
13、LAST_SQL_FUNCTION_CODE:返回语句的SQL FUNCTION CODE
例1:

   --这是一个创建一个表的过程的例子。该过程有两个参数:表名和字段及其类型的列表。
CREATE OR REPLACE PROCEDURE ddlproc (tablename varchar2, cols varchar2) AS
   cursor1 INTEGER;
BEGIN
   cursor1 := dbms_sql.open_cursor;
   dbms_sql.parse(cursor1, 'CREATE TABLE ' tablename ' ( ' cols ' )', dbms_sql.v7);
   dbms_sql.close_cursor(cursor1);
end;

例2:

--用DBMS_SQL包和游标计算用户下所有表行数
DECLARE
   t_c1_tname user_tables.table_name%TYPE;
   t_command varchar2(200);
   t_cid integer;
   t_total_records number(10);
   stat integer;
   row_count integer;
   t_limit integer := 0;   --限制只取出记录大于0的表的情况
  
   cursor c1 is select table_name from user_tables order by table_name; --查出所有表的名字
BEGIN
   t_limit := 0;
   open c1;
  
   loop
   fetch c1 into t_c1_tname;                                --取出一个表名
   exit when c1%NOTFOUND;                                   --如果游标记录取完,退出循环
        t_command := 'SELECT COUNT(0) FROM '||t_c1_tname;   --定义SQL命令
        t_cid := DBMS_SQL.OPEN_CURSOR;                      --创建一个游标
        DBMS_SQL.PARSE(t_cid,t_command,dbms_sql.native);    --向服务器发出一个语句并检查这个语句的语法和语义错误
        DBMS_SQL.DEFINE_COLUMN(t_cid,1,t_total_records);    --定义将从FetchRows()函数接收数据的变量的数据类型与大小
        stat := DBMS_SQL.EXECUTE(t_cid);                    --执行此语句,因为执行的是查询,所以必须跟着Fetch_Rows函数并为单个行检索数据
        row_count := DBMS_SQL.FETCH_ROWS(t_cid);            --取回一行数据放入局部缓冲区
        DBMS_SQL.COLUMN_VALUE(t_cid,1,t_total_records);     --返回调用FetchRows()取回的一列的值,这一列的值存储在t_total_records中
       
        if t_total_records > t_limit then
           DBMS_OUTPUT.PUT_LINE(rpad(t_c1_tname,55,' ')||
           to_char(t_total_records,'99999999')||' record(s)');
        end if;
       
        DBMS_SQL.CLOSE_CURSOR(t_cid);
   end loop;
  
   close c1;
END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值