加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle数据库中游标的游标的使用

发布时间:2020-12-12 13:45:38 所属栏目:百科 来源:网络整理
导读:本人不喜欢说概念啥的,就直接说明使用方法吧 案例1: 1 DECALRE 2 -- 声明游标 3 CURSOR C_USER(C_ID NUMBER ) IS 4 SELECT NAME FROM USER WHERE TYPEID = C_ID; 5 V_NAME C_USER % rowtype; -- 定义游标变量 6 BEGIN 7 OPEN C_USER(变量值); -- 打开游标

本人不喜欢说概念啥的,就直接说明使用方法吧

案例1:

 1 DECALRE
 2        --声明游标
 3 CURSOR C_USER(C_ID NUMBER) IS
 4        SELECT NAME FROM USER WHERE TYPEID = C_ID;
 5        V_NAME C_USER%rowtype; --定义游标变量
 6 BEGIN
 7 OPEN C_USER(变量值);    --打开游标
 8     LOOP
 9         FETCH C_USER INTO V_NAME;
10         EXIT FETCH C_USER%NOT FOUND;
11         do something
12     END LOOP
13 CLOSE C_USER;     
14 END;  
View Code
是不是有点看不懂,没关系,我也没怎么看得懂

所以案例2:

说明:

  1、file$是表名,file#,?status$,blocks 是字段名

  2、将表file$中的file#,blocks 数据列出来,相当于select?file#,blocks from?file$;

--连接系统数据库
SQL>conn / as sysdba

--以下是在sql窗口下执行的
declare
       --声明游标
       Cursor cur_file is
              select file#,status$,blocks from file$;
       CurFileInfo cur_file%rowtype;  --定义游标变量(所有的变量都在里面)
begin
       open  cur_file; --打开游标
       Loop
             Fetch cur_file into CurFileInfo ; 
             Exit when cur_file%notfound;--查不到数据则退出;
             Dbms_Output.put_line(CurFileInfo.file#);
        end loop;
        Exception--出现异常,则关闭游标,并打印出问题来
            when others then
                 close cur_file;
                 Dbms_Output.put_line(sqlerrm);
                 
         if cur_file%isopen then
                  --关闭游标
                  close cur_file;
         end if;
end;

?然后稍微进阶一下:

案例3:

问题:假如我查到多个表,而每个表都要加入同一个字段,这个怎么解决。

解决办法如下:

 1 --连接数据库,是在命令窗口下执行的
 2 登陆系统:
 3 sqlplus /nolog
 4 以管理员的身份运行:
 5 SQL>conn / as sysdba
 6 
 7 --以下是在SQL窗口下执行的
 8 DECLARE
 9         ADD_SQL    VARCHAR2(1000);        --定义添加字段的语句
10         ADD_TABLE_NAME  VARCHAR2(50);     --定义获取的表名
11         CURSOR ADD_TABLE_FIELD IS   --取名添加表字段
12                SELECT TABLE_NAME FROM USER_TABLES where table_name like WRI%SYNOPSIS$ ; --查出指定的表出来
13 BEGIN
14                OPEN ADD_TABLE_FIELD;
15                LOOP
16                     --提取一行数据到ADD_TABLE_FIELD
17                     FETCH ADD_TABLE_FIELD  INTO ADD_TABLE_NAME;
18                           --判断是否读取到,没读取到就退出
19                           --%notfound是没有取到的意思
20                           EXIT WHEN ADD_TABLE_FIELD%NOTFOUND;
21                           
22                           --下面sql语句中,表名两边都要有空格,不然不会执行语句的,即:[table ‘]和[‘ add]不能写成[table‘]和[‘add]
23                           ADD_SQL  := alter table  || ADD_TABLE_NAME ||  add 修改人 varchar2(20);
24                           EXECUTE IMMEDIATE ADD_SQL;--执行该语句
25                           
26                 END LOOP;--关闭游标
27                 CLOSE ADD_TABLE_FIELD;
28 END;    

?

好了,差不多了,就这样了。

?

等等,你们应该没有照搬执行吧,不然的话, 怎么删除我增加的列呢?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读