1. 程式人生 > >PL/SQL 概述與流程控制語句

PL/SQL 概述與流程控制語句

[b]SQL:[/b] 結構化查詢語言(Structured Query Language,簡稱SQL)是用來訪問關係型資料庫一種通用語言,屬於第四代語言(4GL),其執行特點是非過程化,即不用指明執行的具體方法和途徑,而是簡單地呼叫相應語句來直接取得結果即可。
[b]PL/SQL[/b](Procedural Language/SQL)是一種過程化語言,屬於第三代語言,它與C、C++、Java等語言一樣關注於處理細節,它允許SQL的資料操縱語言和查詢語句包含在塊結構(block_structured)和程式碼過程語言中,使PL/SQL成為一個功能強大的事務處理語言。它允許SQL的資料操縱語言和查詢語句包含在塊結構(block_structured)和程式碼過程語言中,使PL/SQL成為一個功能強大的事務處理語言。PL/SQL區段只被編譯一次並且以可執行的形式儲存,以降低響應時間。

[b]SQL語句、PL/SQL塊與SQL*Plus命令的區別[/b]
SQL語句是以資料庫物件為操作物件的語言,主要包括資料定義語言DDL,資料操縱語言DML,資料控制語言DCL和資料儲存語言DSL等。當輸入SQL語句後,SQL*Plus將其儲存在內部緩衝區中,當SQL命令輸入完畢後,可以通過在命令列的末尾輸入分號“;”並按回車結束,或者在單獨一行上用斜槓“/”或空行表示結束。
PL/SQL塊同樣是以資料庫物件為操作物件,但由於SQL本身不具備過程控制功能,所以為了能夠與其他語言一樣具備過程控制的處理功能,在SQL中加入諸如迴圈和選擇等面向過程的處理功能,由此形成了PL/SQL。所有PL/SQL語句的解釋均由PL/SQL引擎來完成,使用PL/SQL塊可編寫過程,觸發器和包等資料庫永久物件。
SQL*Plus命令主要用來格式化查詢結果,設定選擇,編輯以及儲存SQL命令,設定查詢結果的顯示格式,並且可以設定環境選項。可以編輯互動語句,可以與資料庫進行“對話”。
[size=large][b]一 . PL/SQL塊[/b][/size]
[b]控制語句—迴圈[/b]
1.
while (no<=90 ) loop
insert into depart(depno) values(no);
no:=no=10;
end loop;

2.
loop
.....
exit when eno=100;
.....
end loop;

3.
for num in 1..10 lopp
dbms_output.putline('');
end loop;

[b]控制語句—條件[/b]
1.
if  condition then...
end if;

2.
if condition  then  ...
esle if condition then...
else ....
end if;

3. goto語句;
DECLARE 
eno emp.empno%TYPE ;
sal emp.sal%TYPE ;
BEGIN
eno := &en ;
SELECT sal INTO sal FROM emp WHERE empno=eno ;
IF sal>3500 THEN goto po1 ;
ELSE IF sal>2000 THEN goto po2 ;
ELSE goto po3 ;
END IF ;
<<po1>> DBMS_OUTPUT.put_line('高工資。。。') ;
<<po2>> DBMS_OUTPUT.put_line('中等工資。。') ;
<<po3>> DBMS_OUTPUT.put_line('底工資。。。') ;
END ;

4. case-when
CASE有兩種表示式:
a.
select u.id, u.realname, U.SEX,
( case u.sex
when 1 then '男'
when 2 then '女'
else '空的'
END
) 性別
from users u;

b.

CASE
  WHEN condition1 THEN result1
  WHEN condistion2 THEN result2
  WHEN condistionN THEN resultN
  ELSE default_result
END