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;