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;    

 

好了,差不多了,就這樣了。

 

等等,你們應該沒有照搬執行吧,不然的話, 怎么刪除我增加的列呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM