Oracle PLSQL:

來源:互聯網
上載者:User

標籤:open   into   語句   數組   fetch   ram   sys   匹配   alter   

PLSQL:
  符號:
    賦值: :=

  基本樣本:

        set serveroutput on   //設定輸出開啟.        declare          --說明部分                  begin          --程式          dbms_output.put_line(‘Hello World‘);        exception                end;        /

 


  引用型變數:
    --查詢7839的姓名和薪水

        --查詢7839的姓名和薪水        set serveroutput on        declare          --定義變數儲存姓名和薪水          --pename varchar2(20);          --psal   number;          pename emp.ename%type;      //引用型變數          psal   emp.sal%type;              begin          --得到姓名和薪水          select ename,sal into pename,psal from emp where empno=7839;          dbms_output.put_line(pename||‘的薪水是‘||psal);        end;        /

 


  記錄型變數(代表了一行,多個列,類似數組)
    --查詢7839的姓名和薪水

        set serveroutput on        declare          --定義記錄型變數:代表一行          emp_rec emp%rowtype;        begin          select * into emp_rec from emp where empno=7839;          dbms_output.put_line(emp_rec.ename||‘的薪水是‘||emp_rec.sal);        end;        /

 


  IF語句
    --判斷使用者從鍵盤輸入的數字

        set serveroutput on        --接收鍵盤輸入        --num: 地址值,在該地址上 儲存了輸入的值        accept num prompt ‘請輸入一個數字‘;  //accept 命令        declare          --定義變數儲存輸入的數字          pnum number := #            //從地址上取出數字 使用 &        begin          if pnum = 0 then dbms_output.put_line(‘您輸入的是0‘);            elsif pnum = 1 then dbms_output.put_line(‘您輸入的是1‘);            elsif pnum = 2 then dbms_output.put_line(‘您輸入的是2‘);            else dbms_output.put_line(‘其他數字‘);          end if;        end;        /

 

  迴圈語句(共有三種方式,此處舉例一種):
    --列印1~10

        set serveroutput on        declare          pnum number := 1;        begin          loop            --允出準則            exit when pnum > 10;                        dbms_output.put_line(pnum);            --加一            pnum := pnum + 1;          end loop;        end;        /

 

  Cursor:游標(相當一個resultset, 結果集):
    1. 游標的屬性:
      %isopen      %rowcount (影響的行數)
      %found        %notfound
    2. 預設,一個會話中只能開啟300個游標
                show parameter cursor //查看參數 --->後面兩個都是這裡查來的
      修改: alter system/session set open_cursors=400;

    3. cursor_sharing ---> 效能最佳化
      EXACT(預設),   FORCE(提效能),   SIMILAR

    例子:
      --查詢並列印員工的姓名和薪水(不帶參數)

            set serveroutput on            declare              --定義游標              cursor cemp is select ename,sal from emp; //定義一個游標              pename emp.ename%type;              psal   emp.sal%type;            begin              --開啟游標              open cemp;                            //開啟一個游標              loop                --取一條記錄                fetch cemp into pename,psal;        //取出一個記錄                --允出準則                --exit when 沒有取到記錄;                exit when cemp%notfound;                dbms_output.put_line(pename||‘的薪水是‘||psal);              end loop;                            --關閉游標              close cemp;                            //關閉游標            end;            /

 

    例二(帶參數):
      --查詢某個部門的員工姓名

            set serveroutput on            declare              cursor cemp(dno number) is select ename from emp where deptno=dno;              pename emp.ename%type;            begin              open cemp(20);     //傳參              loop                fetch cemp into pename;                exit when cemp%notfound;                                dbms_output.put_line(pename);              end loop;              close cemp;            end;            /

 

exception(例外)
  系統例外:
    No_data_found (沒有找到資料)
    Too_many_rows (select into 語句匹配多個行)
    Zero_Divide (被 0 除)
    Value_error (算數或者轉換異常)
    Timeout_on_resource(等待資源逾時)

    --被0除
    

                set serveroutput on                declare                  pnum number;                begin                  pnum := 1/0;                                  exception                  when zero_divide then dbms_output.put_line(‘1:0不能做分母‘);                                         dbms_output.put_line(‘2:0不能做分母‘);                  when value_error then dbms_output.put_line(‘算術或者轉換錯誤‘);                  when others then dbms_output.put_line(‘其他例外‘);                end;                /

 

  自訂例外:
    --查詢50號部門的員工姓名

                set serveroutput on                declare                  cursor cemp is select ename from emp where deptno=50;                  pename emp.ename%type;                                    --自訂例外                  no_emp_found exception;   //定義一個 例外 類型的變數                begin                  open cemp;                  --取第一條記錄                  fetch cemp into pename;                                    if cemp%notfound then                    --拋出例外                    raise no_emp_found;    //拋出例外                  end if;                  --pmon: process monitor                  close cemp;                                  exception      //一般處理是儲存到一個表中                  when no_emp_found then dbms_output.put_line(‘沒有找到員工‘);                  when others then dbms_output.put_line(‘其他例外‘);                 end;                /

 

Oracle PLSQL:

聯繫我們

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