Oracle游标使用实例讲解

时间:2018-09-20
本文章向大家介绍Oracle游标使用实例讲解,需要的朋友可以参考一下

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

案例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#, status$,blocks 数据列出来,相当于select file#, status$,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;    

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

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