2013年11月12日 星期二

[Tips]基本介紹Oracle PL/SQL

PL/SQL(Procedural Language/Structured Query Language)是Oracle推出的程序語言(Procedural Language),用來擴充SQL的的功能。PL/SQL中會運用到一些程式裡面變數設定、條件判斷(if..then)、迴圈(for)等概念。

首先我們先來看一個簡單的PL/SQL,主要分為兩個部分,Declare為定義變數的地方,Begin...End為程式邏輯的地方,也是主要撰寫著墨的部分。


DECLARE
  v1 number(5);
  v2 varchar2(10);
  v3 date;
BEGIN
  --to do
END;

1)除了常見的型態宣告外,還有為了避免宣告錯誤而可以採用「%type、%rowtype」來代替。差別在前者是宣告一個data item,而後者宣告一個record
DECLARE
 v1 scott.emp.empno%type;

DECLARE

 v1 scott.emp%rowtype;

2)if..then,利用條件判斷,當符合條件時,我們可以用dbms_output.put_line將結果output出來。

DECLARE
 v1 varchar2(10):='IT';
BEGIN
 if v1 = 'Sales' then
   dbms_output.put_line('Sales');
 elsif v1 = 'EE' then
   dbms_output.put_line('EE');
 else
   dbms_output.put_line('IT');
 End if;
END;

@這邊需要注意的是elsif,不是elseif


3)case是條件判斷的另一種寫法。相較於if..then,case提供更好的可讀性。

DECLARE
 v1 varchar2(10):='IT';
BEGIN
 case v1
   when 'Sales' then
    dbms_output.put_line('Sales');
   when 'EE' then
    dbms_output.put_line('EE');
   else
    dbms_output.put_line('IT');
 End case;
END;

4)for迴圈,利用迴圈,我們可以進行1+2...+10的運算,最後將結果output=55出來。
DECLARE
 v1 varchar2(10):=0;
BEGIN
 FOR i in 1..10
 loop
   v1 := v1 + i;
 end loop;
 dbms_output.put_line(v1);
END;

@這邊要注意的是變數指派是:=,不是=


5)while迴圈,改寫for迴圈進行1+2+..+10的運算。利用exit when i>10判斷迴圈是否終止。

DECLARE
 v1 varchar2(10):=0;
 i  varchar2(10):=1;
BEGIN
 while true
 loop
   v1 := v1 + i;
   i  := i + 1;
   exit when i>10;
 end loop;
 dbms_output.put_line(v1);
END;