複合資料型別和遊標

perfychi發表於2012-08-02

1.       利用遊標技術將‘95001’學生選修的所有課程名稱放進一個巢狀表變數中,然後遍歷該巢狀表並輸出該學員選修的課程名稱。

執行結果形式如下:

95001 選修的課程如下:

資料庫

數學

資訊系統

資料結構

PL/SQL 過程已成功完成。

SET SERVEROUTPUT ON

declare

v_cno sc.cno%type;

v_cname course.cname%type;

cursor c_cno is select cno from sc where sno='95001';

begin

open c_cno;

loop

fetch c_cno into v_cno;

exit when c_cno%notfound;

select cname into v_cname from course where v_cno=cno;

dbms_output.put_line(v_cname);

end loop;

close c_cno;

end;

2.     用帶引數的顯式遊標技術將使用者輸入學號的學生選修的所有課程成績放進一個VARRAY變數中,然後遍歷該VARRAY並輸出該學員選修的課程成績。

執行結果形式如下:

輸入 sno 的值: 95001

原值   10: v_sno:='&sno';

新值   10: v_sno:='95001';

95001 選修的課程成績如下:

58

85

70

92

0

PL/SQL 過程已成功完成。

SET SERVEROUTPUT ON

declare

v_grade sc.grade%type;

vsno sc.sno%type;

cursor v_sno(varry sc.sno%type) is select grade from sc where sno=varry;

begin

   vsno:=&v_input;

   open v_sno(vsno);

loop

fetch v_sno into v_grade;

exit when v_sno%notfound;

dbms_output.put_line(v_grade);

end loop;

close v_sno;

end;

3.       有這麼一張表t_t,他只有一個number(8)的欄位a,由於在建立表時忘記設定主鍵約束,導致表中有很多重複的記錄。請你編寫一個程式,利用遊標技術將表中重複的記錄保留一個,刪除其餘的。

create table t_t(a number(8));

insert into t_t values(1);

insert into t_t values(3);

insert into t_t values(6);

insert into t_t values(1);

insert into t_t values(6);

insert into t_t values(5);

insert into t_t values(3);

insert into t_t values(1);

insert into t_t values(1);

set serveroutput on

declare

xx t_t.a%type;

temp2 t_t.a%type;

cursor v_a is select A from t_t;

cursor v_aa(temp t_t.a%type) is select A from t_t where A=temp for update of A nowait;

begin

      open v_a;

      loop fetch v_a into xx;

           exit when v_a%notfound;

           open v_aa(xx);

           fetch v_aa into temp2; //向後走一個記錄,如果沒有這條語句,所有的記錄就回被清空。有這條語句,那麼會保留跳過的這條記錄,而只刪除後面的那些重複的記錄。

           loop fetch v_aa into temp2;

                 exit when v_aa%notfound;

                 delete from t_t where current of v_aa;

           end loop;

           close v_aa;

      end loop;

      close v_a;

end;

此題解方法採用兩個遊標,外遊標v_at_t中讀取所有資料資訊,然後從v_a中提取資訊,後根據提取的資訊從v_aa中開啟,v_aa是查詢資訊為temp的資料,然後將資訊儲存到v_aa中,此時我們只需在遊標v_aa中刪除重複的資訊(注意:第一條資訊以後的資訊都為重複資訊,需刪除。)這樣此題得到解決。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27042095/viewspace-739593/,如需轉載,請註明出處,否則將追究法律責任。

相關文章