1. 程式人生 > >Oracle中PL/SQL之常量和變數的定義、遊標(游標)的使用

Oracle中PL/SQL之常量和變數的定義、遊標(游標)的使用

PL/SQL常量和變數的定義

變數的資料型別:char、varchar2、date、number、boolean、long

常量定義:isshow boolean :=true;

說明變數:說明變數名、資料型別和長度後用分號結束說明語句。例:e_name varchar2(20);

引用變數:e_name的型別與emp表中ename列的型別一樣。例:e_name emp.ename%type;

記錄變數:emprec代表一行資料和型別與emp表的一行資料的型別一樣。例:emprec emp%rowtype;

記錄變數分量的引用:例:取員工的姓名(emprec.ename),ename要和emp表的列名一致。

PL/SQL遊標(游標)的使用

為什麼要使用遊標?在寫java程式中有集合的概念,那麼在pl/sql中也會用到多條記錄,這時我們就要用到遊標,遊標可以儲存查詢返回的多條資料。

語法:cursor 遊標名 [(引數名1 資料型別,引數名2 資料型別,......)] is select 語句;

例如:cursor c1 is select ename from emp;

遊標的使用步驟:

  1. 開啟遊標:open c1;(開啟遊標執行查詢)
  2. 取一行遊標的值:fetch c1 into e_name;(取一行到變數中)
  3. 如果是循環遊標,遊標退出迴圈的方式:exit when c1%notfound
  4. 關閉遊標:close c1;(關閉遊標釋放資源)
  5. 注意:上面的e_name必須與emp表中的ename列型別一致,需要定義e_name emp.ename%type;

遊標的屬性:%isopen(遊標是否開啟)    %rocount(遊標影響的行數)    

                     %found(遊標有記錄)         %notfound(遊標沒有記錄)

  • 沒有帶引數的遊標例子: 查詢並列印員工的姓名和薪水
declare 
   --定義遊標(查詢員工姓名和薪水)
   cursor cemp is select ename,sal from emp;
   pename varchar2(20);--說明變數
   psal   emp.sal%type;--引用變數
begin
  --開啟遊標
  open cemp;
  --循環遊標
  loop
       --取當前記錄賦值給變數
       fetch cemp into pename,psal;
       --沒有取到記錄,退出迴圈
       exit when cemp%notfound;
       --列印員工姓名和薪水
       dbms_output.put_line(pename||'的薪水是'||psal);
  end loop;
  --關閉遊標
  close cemp;
end;

列印結果:

  • 帶引數的遊標例子:查詢某個部門的員工姓名
declare 
   --形參
   cursor cemp(dno number) is select ename from emp where deptno=dno;
   pename emp.ename%type;--引用變數
begin
   --實參(查詢20號部門的員工姓名)
   open cemp(20);
   loop
        fetch cemp into pename;
        exit when cemp%notfound;
        
        dbms_output.put_line(pename);
   end loop;
   close cemp;
end;

列印結果: