1. 程式人生 > >Oracle-PL/SQL程式設計

Oracle-PL/SQL程式設計

PL/SQL塊基本結構

declare

<declarations section> -- 宣告部分

begin

<executable command(s)> -- 執行部分

exception

<exception handling> -- 異常處理部分

end;

宣告部分:包含變數、常量定義,由 declare 關鍵字開始,如果不宣告變數,可以省略這部分

執行部分:所有可執行 PL/SQL 語句放在這部分,由 begin 關鍵詞開始, end 關鍵詞結束,這部分不可省略,注意 end 後的分號

用 exception 關鍵詞把可執行部分分成兩個小部分,之前程式正常執行,一旦出現異常就跳轉到異常部分執行

宣告

變數宣告

變數名 資料型別 [ not null ] [ := 初始值 ] | [ defacult 初始值 ]

常量宣告

----常量聲明後不可再次賦值

變數名 constant 資料型別 [ not null ] [ := 初始值 ] | [ defacult 初始值 ]

declare

  --宣告變數並且初始化

  a number := 100;

  b number default 100;

  --宣告屬性變數

  c a%type := a; --宣告c , c的型別是和a一樣的型別

  myemp emp%rowtype;--宣告mymep,myemp的型別是屬性型別,記錄型別,引用資料庫表中的一行作為資料型別 , 訪問裡面屬性用“ . ”

  myname emp.ename%type;--宣告myid,myid的型別與emp表中的eid相同

begin

  dbms_output.put_line(a);

  dbms_output.put_line(c);

  --把emp表中eid='2018001'的ename賦值給myname

  select ename into myname from emp where eid='2018001';

  dbms_output.put_line(myname);

  --把emp表中eid='2018001'的那一條記錄賦值給myemp

  select * into myemp from emp where eid='2018001';

  dbms_output.put_line(myemp.ename);

end;

PL/SQL IF-THEN語句

if 條件 then

----條件成立執行語句

end if;
declare

  score number default 60;

begin

  if score >= 60 then

    dbms_output.put_line('及格了!');

  end if;

end;

PL/SQL IF-THEN-ELSE語句

if 條件 then

----條件成立執行語句

else

----條件不成立執行語句

end if;


declare

  score number default 59;

begin

  if score >= 60 then

    dbms_output.put_line('及格了!');

  else

    dbms_output.put_line('不及格!');

  end if;

end;

PL/SQL IF-THEN-ELSE語句

第一種:

if 條件1 then

----條件1成立執行語句

elsif 條件2 then

----條件2成立執行語句

elsif 條件3 then

----條件3成立執行語句

else

----條件1、2、3都不成立執行語句

end if;
declare

  score number default 75;

begin

  if score>80 then

    dbms_output.put_line('優');

  elsif score between 60 and 80 then

    dbms_output.put_line('良');

  else

    dbms_output.put_line('差');

  end if;

end;
第二種:

if 條件1 then

----條件1成立執行語句

else if 條件2 then

----條件2成立執行語句

else if 條件3 then

----條件3成立執行語句

else

----條件1、2、3都不成立執行語句

end if;

end if;

end if;

注意:有幾個if就有幾個end if;
declare

  score number default 75;

begin

  if score>80 then

    dbms_output.put_line('優');

  else if score between 60 and 80 then

    dbms_output.put_line('良');

  else

    dbms_output.put_line('差');

  end if;

  end if;

end;

PL/SQL CASE語句

(如果選擇器和表示式匹配就執行對應的執行語句,如果選擇器與所有表示式都不匹配,就執行else後面執行語句)

case 選擇器

when 表示式1 then 執行語句1;

when 表示式2 then 執行語句2;

when 表示式3 then 執行語句3;

when 表示式4 then 執行語句4;    

...

else 執行語句;

end case;

declare

  flag varchar2(50):=upper('&flag');

begin

  case flag

    when 'A' then dbms_output.put_line('優');

    when 'B' then dbms_output.put_line('良');

    when 'C' then dbms_output.put_line('差');

    else dbms_output.put_line('有問題');

  end case;

end;


declare

  flag varchar2(50):=upper('&flag');

  result0 varchar(50);

begin

  result0 :=

  case flag

    when 'A' then '優'

    when 'B' then '良'

    when 'C' then '差'

    else '有問題'

  end;

  dbms_output.put_line(result0);

end;
--用於搜尋


declare

  flag varchar2(50):=upper('&flag');

  result0 varchar(50);

begin

  result0 :=

  case

    when flag='A' then '優'

    when flag='B' then '良'

    when flag='C' then '差'

    else '有問題'

  end;

  dbms_output.put_line(result0);

end;

PL/SQL LOOP語句

(無限迴圈語句,如果不新增 exit where 語句 或者 exit 語句就是無限迴圈,exit 類似於 break)

loop 

----迴圈體

----[ exit when 退出迴圈條件 ]

----[ if ... then 

           exit;

       end if ]

end loop;


declare

  i number:=1;

  sum0 number:=0;

begin

  loop

    sum0:=(sum0+i);

    i:=i+1;

    if i > 10 then

      exit;

    end if;

  end loop;

  dbms_output.put_line(i);

  dbms_output.put_line(sum0);

end;
declare

  i number:=1;

  sum0 number:=0;

begin

  loop

    sum0:=(sum0+i);

    i:=i+1;

    exit when i>10;

  end loop;

  dbms_output.put_line(i);

  dbms_output.put_line(sum0);

end;

PL/SQL WHILE語句

where 條件 loop

----迴圈體

end loop;
declare

  sum0 number:=0;

  i number:=1;

begin

  while i<=10 loop

    sum0:=(sum0+i);

    i:=i+1;

    exit when i>10;

  end loop;

  dbms_output.put_line(i);

  dbms_output.put_line(sum0);

end;

PL/SQL FOR語句

(reverse表示從迴圈上限到下限迴圈)

for 迴圈變數 in [ reverse ] 迴圈下限..迴圈上限 loop

----迴圈體

end loop;
declare

  sum0 number:=0;

begin

  for i in 1..10 loop

    sum0:=sum0+i;

  end loop;

  dbms_output.put_line(sum0);

end;