PL/SQL程式之游標

來源:互聯網
上載者:User
1、說明游標文法:CURSOR  游標名  [ (參數名  資料類型[,參數名 資料類型]...)]  IS  SELECT   語句;2、用於儲存一個查詢返回的多行資料3、開啟游標:                 open c1;    (開啟游標執行查詢)4、取一行游標的值:fetch c1 into pjob; (取一行到變數中)5、關閉游標:          close  c1;(關閉遊標釋放資源)6、注意: 上面的pjob必須與emp表中的job列類型一致:    定義:pjob emp.job%type;例一:按職工的職稱長工資,總裁1000元,經理800元,其他人員長400元Java程式SQL> update emp set sal = (case job when 'PRESIDENT' then sal+1000when 'MANGER' then sal+800else sal+400end);PL/SQL程式declare--定義游標   查詢empno以及job崗位cursor c1 is select empno,job from emp;--聲明一個變數   此變數與emp表中的job欄位類型一致emp_job emp.job%type;--聲明一個變數   此變數與emp表中的empno欄位類型一致emp_empno emp.empno%type;--開始begin --開啟游標 open c1; --迴圈開始 loop    --取出游標   fetch c1 into emp_empno,emp_job;   exit when c1%notfound;--判斷游標是否存在  如果存在  則往下執行  否則  不執行      if emp_job='PRESIDENT' then update emp set sal =sal+1000 where empno=emp_empno;   elsif emp_job='MANAGER' then update emp set sal =sal+800 where empno=emp_empno;   else  update emp set sal =sal+1000 where empno=emp_empno;   end if;   end loop;--退出迴圈   close c1;--關閉游標   end;--結束標識例二:找出7369的職位declare emp_job emp.job%type;begin select job into emp_job from emp where empno=7369;-----into方法,把查詢出來的job  名放到emp_job中 dbms_output.put_line(emp_job);end;找出emp中的所有職位 declare--定義游標   查詢job崗位cursor c1 is select job from emp;--聲明一個變數   此變數與emp表中的job欄位類型一致emp_job emp.job%type;--開始begin --開啟游標 open c1; --迴圈開始 loop    --取出游標   fetch c1 into emp_job;   exit when c1%notfound;--判斷游標是否存在  如果存在  則往下執行  否則  不執行   dbms_output.put_line(emp_job);   end loop;--退出迴圈   close c1;--關閉游標   end;--結束標識例三:尋找出所有的enamedeclarecursor c1 is select * from emp;emp_row emp%rowtype;beginopen c1;loopfetch c1 into emp_row;exit when c1%notfound;dbms_output.put_line(emp_row.ename);end loop;close c1;end;例四:查詢部門號為10的員工資訊declarecursor c1 (emp_deptno number) is select * from emp where deptno=emp_deptno;emp_row emp%rowtype;beginopen c1(10);dbms_output.put_line('部門號為10的員工資訊');loop     fetch c1 into emp_row;     exit when c1%notfound;     dbms_output.put_line('員工編號'||emp_row.empno||'員工姓名'|| emp_row.ename||'員工工資'|| emp_row.sal||'員工部門編 號'||emp_row.deptno);end loop;close c1;end;結果:部門號為10的員工資訊員工編號7782員工姓名CLARK員工工資2450員工部門編號10員工編號7839員工姓名KING員工工資5000員工部門編號10員工編號7934員工姓名MILLER員工工資1300員工部門編號10帶參數的游標例五:帶有參數游標的練習SQL> declare  2  cursor c1(emp_deptno number) is select * from emp where deptno=emp_deptno;  3  emp_row emp%rowtype;  4  begin  5  open c1(10);  6  loop  7  fetch c1 into emp_row;  8  exit when c1%notfound ;  9  dbms_output.put_line('員工的名稱'|| emp_row.ename || emp_row.job); 10  end loop; 11  close c1; 12  end; 13  / 結果:員工的名稱CLARKMANAGER員工的名稱KINGPRESIDENT員工的名稱MILLERCLERK

特別注意:

在開啟遊標之前最好先判斷遊標是否已經是開啟的。

通過ISOPEN判斷,格式:

遊標%ISOPEN

IF mycur%ISOPEN  

THEN

null ;

ELSE

OPENmycur ;

END IF ;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.