1. 程式人生 > >ORACLE中級進階之一

ORACLE中級進階之一

– 一、PL/SQL是在oracle裡面的程式語言,用來寫儲存過程、觸發器、函式等等。

DECLARE –申明部分:申明各種變數遊標(可選)
K BINARY_INTEGER := 0;
BEGIN –執行部分,程式由此開始執行(必選)
LOOP –迴圈
DBMS_OUTPUT.put_line(K); –列印字串
K := K + 1;
EXIT WHEN(K >= 10); –迴圈退出條件
END LOOP; –結束迴圈
END; –結束
/ –/”表示執行,相當於輸入了run;

– 總結:PL/SQL寫程式非常固定
[DECLARE]
–宣告部分,可選。宣告各種變數遊標
BEGIN
–執行部分,必須。從這兒開始,程式開始執行
[EXCEPTION]
–異常處理部分,可選。相當於catch到exception時執行的東西
END;
–結束,end後要有分號

– 二、ORACLE中的五種約束條件
1、非空約束(NOT NULL)
2、唯一約束(UNIQUE)
1)、唯一約束要求被約束的列或列的組合值是唯一的,不能有兩個相同值存在。
2)、唯一約束可以定義在列級也能定義在表級。表級可以定義欄位的組合。
3)、唯一約束允許空值,因為空值不等於任何值。
4)、組合欄位的唯一約束,只要欄位的組合不完全一樣就可以插入表。
3、主鍵約束(PRIMARY KEY)


1)、一個表只能有一個主鍵約束。
2)、單一主鍵定義在列級,組合主鍵定義在表級。
3)、主鍵不允許空值,不允許出現重複值。
4、外來鍵約束(FOREIGN KEY)
1)一個表的外來鍵必須是,另一個表的主鍵或唯一鍵。
2) 外來鍵可以為空值,一個外來鍵值必須匹配一個在父表中存在的值或者空值。
3) 外來鍵可以定義在表級(單列),列級(單列或列的組合)。
4) 外來鍵必須指向父表的PK欄位或UK欄位。
5、check約束

check約束定義了一個每行都必須滿足的條件,類似與在插入資料時,對資料做了一個where過濾。
舉例如下:

SQL> CREATE TABLE tb_age (age NUMBER(3)); 
Table created. 
//限定年齡的範圍【0,125】 
SQL> ALTER TABLE tb_age ADD CONSTRAINT ck_temp_age CHECK((AGE>0) AND (AGE <= 125)); 
Table altered. 
//在給定範圍內可以插入。 
SQL> insert into tb_age values(33); 
1 row created.
**重點內容**
//超出範圍內的兩個測試值-1, 126都會報錯。 
SQL> insert into tb_age values(126); 
insert into tb_age values(126) 

– 三、GROUP BY & COUNT 分組
1)分組的實質就是一行(或多行)中的某一列(或多列)具有相同的值
2)組是飛控的,如果分組成功,組至少包含一個成員(或行)
3)組是獨特的,意味著,當查詢中使用group by是,select列表中不必使用distinct關鍵字
4)當針對非空表的查詢(包含該group BY)中使用聚集函式count時,它絕對不會返回0,至少返回一個非0
注:count(name)會忽略列的空值行,count(*)不會忽略空值行

– 四、Oracle字符集

  SELECT userenv('language') from dual;

oracle環境變數中的NLS_LANG是定義客戶端的字符集。
比如環境變數NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
但是資料庫三個例項的字符集可以分別是:
AMERICAN_AMERICA.AL32UTF8、
AMERICAN_AMERICA.WE8ISO8859P1、
AMERICAN_AMERICA.ZHS16GBK

– 五、儲存過程與函式
儲存過程:一段程式,用於該表資料庫物件的狀態,可以包含一個或多個行為,往往是將一個表的記錄經過處理後放到另一個表。
函式:函式的作用是計算一個功能,往往是用來計算並返回一個計算結果。

區別:
1)函式和儲存過程比較類似,不同的是函式必須返回一個值。二儲存過程僅僅是為了執行一系列的操作
2)在呼叫的過程中,函式可以作為表示式的一部分進行呼叫,並且可以使用在select中。二儲存過程只能作為一個PL/SQL語句進行呼叫,且不能再select語句中呼叫。
3)語法結構都比較類似,函式使用function進行定義,具有return返回子句之外。
4)函式和儲存過程都可以使用out引數來返回內容

–語法:
–儲存過程
建立儲存過程的語法格式:

CREATE [OR REPLACE] PROCEDURE procedure_name 
[(parameter_name [IN | OUT | IN OUT] TYPE[,….])] 
{IS | AS } 
[LOCAL declarations] 
BEGIN 
executable statements; 
[EXCEPTION 
exception_statements; 
END procedure_name;

–函式:
函式的基本語法格式:

CREATE [OR REPLACE] FUNCTION function_name 
[(parameter_name [IN | OUT | IN OUT] TYPE[,….])] 
RETURN TYPE 
{IS | AS} 
BEGIN 
FUNCTION BODY 
END function_name;