oracle 學習筆記之PL/SQL程式設計

來源:互聯網
上載者:User

標籤:oracle

1.PL/SQL的定義:

PL/SQL(Procedure Language/SQL)

PLSQL是Oracle對sql語言的過程化擴充

指在SQL命令語言中增加了過程處理語句(如分支、迴圈等),使SQL語言具有過程處理能力。

把SQL語言的資料操縱能力與過程語言的資料處理能力結合起來,使得PLSQL面向過程但比過程語言簡單、高效、靈活和實用。

 Plsql(oracle),Transact-sql(SQL server)

2.入門程式-->列印hello world;

set serveroutput on;--聲明變數 如果沒有可以不寫declare-- 開始begindbms_output.put_line('hello world!');--結束 必須加上分號end;/
運行結果:



注意:如果要在螢幕上輸出資訊,需要將serveroutput開關開啟:

3.聲明變數

1)方式一:

set serveroutput on;declare  --聲明一般的變數,可以指定初始值,注意要使用:=  vname emp.ename%type;--和資料庫中的變數的類型保持一致  vsal number :=0;--聲明為number類型begin   --把查詢的結果賦值給變數  select ename,sal into vname,vsal from emp where empno=7839;  --顯示結果  dbms_output.put_line(vname||'的薪水是'||vsal);end;/
運行結果:



2)方式二

set serveroutput on;accept empno prompt '請輸入員工編號';declare  --聲明記錄變數  rec_emp emp%rowtype;begin  --把查詢出來的結果賦值給變數  select *  into rec_emp from emp where empno=&empno;  dbms_output.put_line(rec_emp.ename||'的薪水是'|| rec_emp.sal);end;/
運行結果:



4.if

set serveroutput on;accept num prompt '請輸入數字';declare    --定義變數    vnum number;    vstr varchar2(5);begin  vnum:= #  if vnum>0 then vstr:='正數';  elsif vnum<0 then vstr:='負數';  else vstr:='零';  end if;  dbms_output.put_line(vstr);end;/



5.迴圈

1)迴圈方式一

set serveroutput onbegin   for i in 1..10  loop    --迴圈體內容    dbms_output.put_line(i);  end loop;end;/
2)迴圈方式二(這種方式比較常用)

set serveroutput on;declarevnum number :=1;--初始設定變數begin  loop    --退出迴圈的條件    exit when vnum>10;    dbms_output.put_line(vnum);    --加一    vnum:=vnum+1;  end loop;--結束迴圈end;/
3)迴圈方式三:

set serveroutput on;declarevnum number :=1;begin  --當條件成立,就執行迴圈體  while vnum<10  loop    dbms_output.put_line(vnum);    --加一    vnum:=vnum+1;  end loop;end;/
運行結果:



6.游標

set serveroutput on;/*要求:顯示總員工數和所有員工的姓名和工資* select ename,sal from emp;*/declare   --聲明游標  cursor c_emp is select ename,sal from emp;  --定義變數  vcount number;  vname emp.ename%type;  vsal number;begin  --查詢並顯示員工總數量  select count(*) into vcount from emp;  dbms_output.put_line('總的員工數為:'||vcount);  --要使用游標就需要開啟游標  open c_emp;  --迴圈  loop    --先取出一行記錄    fetch c_emp into vname,vsal;    --指定退出迴圈的條件    exit when c_emp%notfound;    dbms_output.put_line(vname||'的工資是'||vsal);  end loop;    --關閉游標  close c_emp;end;/
運行結果:


註:這裡查詢的結果和與cmd命令列查詢的結果一致

7.游標應用案例:給員工漲工資

set serveroutput on--要求 :按照員工的工種漲工資,總裁(PRESIDENT) 1000 ,經理(MANAGER)800 其他員工 400--分析:取出所有員工,每一個員工就行判斷,符合什麼條件,就漲多少工資--select empno,empjob from emp;-- update emp set sal=sal+? where empno=?declare  --定義一個游標(所有員工的集合)  cursor  c_emp is select empno,empjob from emp;  --定義與游標有關的變數  vempno emp.empno%type;  vempjob emp.empjob%type;begin  open c_emp;    loop      --擷取資料      fetch c_emp into vempno,vempjob;      exit when c_emp%notfound;--指定退出迴圈的條件      --判斷是什麼情況 就漲多少工資      if vempjob='PRESIDENT' then update emp set  sal=sal+1000 where empno=vempno;      elsif vempjob='MANAGER' then update emp set  sal=sal+800 where empno=vempno;      else update emp set  sal=sal+400 where empno=vempno;      end if;--結束if判斷    end loop;  close c_emp;  commit; --提交事務  dbms_output.put_line('執行完畢');end;/
運行結果:



8.帶參數的游標

set serveroutput on;--要求:顯示10號部門中的總員工數,和每個員工的姓名和工資資訊declare  --定義游標  cursor c_emp(dno number) is select ename,sal from emp where deptno=dno;  --定義與游標相關的變數  vename emp.ename%type;  vsal emp.sal%type;  vdeptno emp.deptno%type;  vcount number;begin  --擷取查詢條件  vdeptno :=&input_deptno;  --顯示 部門中的總員工數  select count(*) into vcount from emp where deptno=vdeptno;  dbms_output.put_line('總的員工數為:'||vcount);  --開啟游標  open c_emp(vdeptno);    loop      fetch c_emp into vename,vsal;      exit when c_emp%notfound;      dbms_output.put_line(vename||'的工資是'||vsal);    end loop;  close c_emp;--關閉游標end;/
運行結果:




9.異常

set serveroutput ondeclare   vnum number;begin   vnum:=1/0;  --處理異常  exception    when zero_divide then dbms_output.put_line('異常:被0除');end;/
運行結果:



10.自訂異常

set serveroutput on;--自訂異常 declare  --聲明一個異常類型  my_exception exception; begin   --拋出異常  raise my_exception;  exception    --異常處理    when my_exception then dbms_output.put_line('自訂異常'); end; /
運行結果:




著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

oracle 學習筆記之PL/SQL程式設計

聯繫我們

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