Oracle資料庫—PL/SQL程式設計
阿新 • • 發佈:2018-12-09
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;