Oracle遊標總結

來源:互聯網
上載者:User

標籤:

1.聲明遊標

declareteacher_id number(5);teacher_name varchar2(5);teacher_title varchar2(50);teacher_sex char(1);cursor teacher_cur is    select tid,tiname,title,sex from teachers where tid<117;

2.開啟遊標

open 遊標名;

declareteacher_id number(5);teacher_name varchar2(5);teacher_title varchar2(50);teacher_sex char(1);cursor teacher_cur is    select tid,tiname,title,sex from teachers where tid<117;open teacher_cur;

3.提取遊標

fetch 遊標名 into 變數列表

declareteacher_id number(5);teacher_name varchar2(5);teacher_title varchar2(50);teacher_sex char(1);cursor teacher_cur is    select tid,tiname,title,sex from teachers where tid<117;open teacher_cur;fetch teacher_cur into tid,tinme,title,sex;

4.關閉遊標

close 遊標名

declare    teacher_id number(5);    teacher_name varchar2(5);    teacher_title varchar2(50);    teacher_sex char(1);cursor teacher_cur is    select tid,tiname,title,sex from teachers where tid<117;open teacher_cur;    fetch teacher_cur into tid,tinme,title,sex;    Loop         EXIT WHEN NOT teacher_cur%FUND;        IF teaher_sex = ‘M‘ THEN            INSERT INTO MALE_TEACHERS(TID,TNAME,TITLE) VALUES();            ELSE             INSERT INTO FEMALE_TEACHERS(TID,TNAME,TITLE) VALUES(teacher_id,teacher_name,teacher_title);        END IF;    FETCH teacher_cur INTO teacher_id,teacher_name,teacher_title,teacher_sex;    END LOOP;CLOSE teacher_cur;END;

使用顯示遊標:

1):使用前用遊標名%ISOPEN檢查開啟狀態,只有值為TRUE是才可使用

2):使用遊標每次都要用%NOTFUND,%FUND確認是否返回成功

3):提取遊標時對應變數個數一致

4):必須關閉遊標釋放資源

 

1.%fund是否找到有效行,是則為true 否則是false

open teacher_cur;fetch teacher_cur into teacher_id,teacher_name,teacher_title,teacher sex;loop exit when not teacher_cur%found;end loop

  SQL%fund

delete from teachers    where tid=teacher_id;if SQL%found then    insert into success values(tid);else    insert into fail values(tid);end if;

2.%NOTFOUND

OPEN teacher_cur;FETCH teacher_cur INTO teacher_id,teacher_name,teacher_title,teacher_sex;LOOP    EXIT WHEN teacher_cur%NOTFOUND;END LOOP

  SQL%NOTFOUND

DELETE FROM TEACHERS    WHERE TID = teacher_id;IF SQL%NOTFOUND THEN    INSERT INTO FALL VALUES(TID);ELSE    INSERT INTO SUCCESS VALUES(TID);END IF;

3.%ROWCOUNT

該屬性記錄了遊標抽取過的記錄行數,也可以理解為當前遊標所在的行號,這個屬性在迴圈判斷中有效

LOOP    FETCH teacher_our INTO teacher_id,teacher_name,teacher_title,teacher_sex;    EXIT WHEN teacher_cur%ROWCOUNT=10;--只抽取10條記錄    ...    END LOOP;

用FOR語句控制遊標的迴圈,系統隱含的定義了一個資料類型為%ROWCOUNT的記錄,作為迴圈計數器,並將隱士的開啟和關閉遊標

FOR teacher_record in teacher_cur LOOP --teacher_record作為記錄名,隱含的代開遊標teacher_cur    INSERT INTO TEMP TEACHERS(TID,TNAME,TITLE,SEX) VALUES(teacher_record,tid,teacher_record,tname,teacher_record,title,teacher_record.sex);END LOOP

4.%ISOPEN

... ...

5.參數話遊標:

DECLARE--定義遊標是帶上參數CURSOR_ID    CURSOR teacher_cur(CURSOR_id NUMBER) IS        SELECT TNAME,TITLE,SEX FROM TEACHERS WHERE TID=CURSOR_id;--使用參數BEGIN    OPEN teacher_cur(my_tid);--帶上參數    LOOP        FETCH teacher_cur INTO teacher_name,teacher_title,teacher_sex;        EXIT WHEN teacher_cur%NOTFOUND;        ...    END LOOP;    CLOSE teacher_cur;END;

 

Oracle遊標總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.