天天看點

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;           

第一種:

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;