PLSQL 開發要點
PL/SQL 塊語法(匿名塊)
[DECLARE]
---declaration statements
BEGIN
---executable statements
[EXCEPTION]
---exception statements
END
Ø 函式
定義函式的語法如下:
FUNCTION name [{parameter[,parameter,...])] RETURN datatypes IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers]
END [name]
Ø 儲存過程
與函式不同,儲存過程沒有返回值,儲存過程
不能由SQL 語句直接使用,只能透過EXECUT 命令或PL/SQL 程式塊內部呼叫,定義存
儲過程的語法如下:
PROCEDURE name [(parameter[,parameter,...])] IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers ]
END [name]
Ø 宣告變數的語法如下:
Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression]
注意:可以在宣告變數的同時給變數強制性的加上NOT NULL 約束條件,此時變數在初
始化時必須賦值。
給變數賦值
給變數賦值有兩種方式:
1.直接給變數賦值
X:=200;
Y=Y+(X*20);
2.透過SQL SELECT INTO 或FETCH INTO 給變數賦值
SELECT SUM(SALARY),SUM(SALARY*0.1) INTO TOTAL_SALARY,TATAL_COMMISSION FROM EMPLOYEE WHERE DEPT=10;
Ø 常量
常量與變數相似,但常量的值在程式內部不能改變,常量的值在定義時賦予,他的聲
明方式與變數相似,但必須包括關鍵字CONSTANT。常量和變數都可被定義為SQL 和用
戶定義的資料型別。
ZERO_VALUE CONSTANT NUMBER:=0;
Ø LOB 資料型別
LOB(大物件,Large object) 資料型別用於儲存類似影像,聲音這樣的大型資料物件,
LOB 資料物件可以是二進位制資料也可以是字元資料,其最大長度不超過4G。LOB 資料類
型支援任意訪問方式,LONG 只支援順序訪問方式。LOB 儲存在一個單獨的位置上,同時
一個"LOB 定位符"(LOB locator)儲存在原始的表中,該定位符是一個指向實際資料的指標。
在PL/SQL 中操作LOB 資料物件使用ORACLE 提供的包DBMS_LOB.LOB 資料型別可分
為以下四類:
. BFILE
. BLOB
. CLOB
. NCLOB
Ø 運算子
= 等於運算子
!= 不等於運算子
<> 不等於運算子
:= 賦值操作
定義語言(Data Definition language)不能在執行部分中使用,DDL 語句與EXECUTE
IMMEDIATE 一起使用或者是DBMS_SQL 呼叫。
Ø IF判斷
IF condition THEN
Statements 1;
Statements 2;
....
ELSE
Statements 1;
Statements 2;
....
END IF
Ø 迴圈控制
LOOP
statements;
END LOOP
例:
X:=100;
LOOP
X:=X+10;
IF X>1000 THEN
EXIT;
END IF
END LOOP;
Y:=X;
EXIT WHEN 語句將結束迴圈,如果條件為TRUE,則結束迴圈。
X:=100;
LOOP
X:=X+10;
EXIT WHEN X>1000;
X:=X+10;
END LOOP;
Y:=X;
WHILE..LOOP
X:=100;
WHILE X<=1000 LOOP
X:=X+10;
END LOOP;
Y=X;
FOR...LOOP
語法:
FOR counter IN [REVERSE] start_range....end_range LOOP
statements;
END LOOP;
X:=100;
FOR v_counter in 1..10 loop
x:=x+10;
end loop
y:=x;
Ø PL/SQL 記錄
顯式定義記錄
TYPE record_type IS RECORD (field_definition_list);
例:
DELCARE
TYPE stock_quote_rec IS RECORD
(symbol stock.symbol%TYPE
, bid NUMBER(10,4)
, ask NUMBER(10,4)
, volume NUMBER NOT NULL:=0
, exchange VARCHAR2(6) DEFAULT 'NASDAQ'
);
real_time_quote stock_quote_rec;
variable
域定義時的%TYPE 屬性用於引用資料庫中的表或檢視的資料型別和大小。
隱式定義記錄
隱式定義記錄中,我們不用描述記錄的每一個域。這是因為我們不需要定義記錄的結構,
不需要使用TYPE 語句,相反在宣告記錄變數時使用%ROWTYPE 命令定義與資料庫表,
檢視,遊標有相同結構的記錄,與TYPE 命令相同的是它是一種定義獲得資料庫資料記錄
的好方法。
DECLARE
accounter_info accounts%ROWTYPR;
CURSOR xactions_cur(acct_no IN VARCHAR2) IS
SELECT action,timestamp,holding
FROM portfolios
WHERE account_nbr='acct_no';
xaction_info xactions_cur%ROWTYPE;
variable
有一些PL/SQL 指令在使用隱式定義記錄時沒有使用%ROWTYPE屬性,比如遊標
FOR 迴圈或觸發器中的:old 和:new 記錄。
DELCARE
CURSOR xaction_cur IS
SELECT action,timeamp,holding
FROM portfolios
WHERE account_nbr='37'
;
BEGIN
FOR xaction_rec in xactions_cur
LOOP
IF xactions_rec.holding='ORCL'
THEN
notify_shareholder;
END IF;
END LOOP;
Ø 給記錄賦值
1、使用SELECT INTO
DECLARE
stock_info1 stocks%ROWTYPE;
stock_info2 stocks%ROWTYPE;
BEGIN
SELECT symbol,exchange
INTO stock_info1.symbol,stock_info1.exchange FROM stocks
WHERE symbol='ORCL';
SELECT * INTO stock_info2 FROM stocks
WHERE symbol='ORCL';
2、使用FETCH
如果SQL 語句返回多行資料或者希望使用帶引數的遊標,那麼就要使用遊標,這種情
況下使用FETCH 語句代替INTO 是一個更簡單、更有效率的方法,但在安全性
較高的包中FETCH 的語法如下:
FETCH cursor_name INTO variable;
我們改寫上面的例子:
DECLARE
CURSOR stock_cur(symbol_in VARCHAR2) IS
SELECT symbol,exchange,begin_date
FROM stock
WHERE symbol=UPPER(symbol_in);
stock_info stock_cur%ROWTYPE
BEGIN
OPEN stock_cur('ORCL');
FETCH stock_cur INTO stock_info;
觸發器(Triggers)
觸發器是一種自動執行響應資料庫變化的程式。可以設定為在觸發器事件之前或之後觸
發或執行。能夠觸發觸發器事件的事件包括下面幾種:
DML 事件
DDL 事件
資料庫事件
DML 事件觸發器可以是語句或行級觸發器。DML 語句觸發器在觸發語句之前或之後觸
發DML 行級觸發器在語句影響的行變化之前或之後觸發。使用者可以給單一事件和型別定義
多個觸發器,但沒有任何方法可以增強多觸發器觸發的命令。下表列出了使用者可以利用的觸
發器事件:
INSERT 當向表或檢視插入一行時觸發觸發器
UPDATE 更新表或檢視中的某一行時觸發觸發器
DELETE 從表或檢視中刪除某一行時觸發觸發器
CREATE 當使用CREATE 語句為資料庫或專案增加一個物件時觸發觸發器
ALTER 當使用ALTER 語句為更改一個資料庫或專案的物件時觸發觸發器
DROP 當使用DROP 語句刪除一個資料庫或專案的物件時觸發觸發器
START 開啟資料庫時觸發觸發器,在事件後觸發
SHUTDOWN 關閉資料庫時觸發,事件前觸發
LOGON 當一個會話建立時觸發,事件前觸發
LOGOFF 當關閉會話時觸發,事件前觸發
SERVER 伺服器錯誤發生時觸發觸發器,事件後觸發
建立觸發器的語法如下:
CREATE [OR REPLACE] TRIGGER trigger_name
{before|after|instead of} event
ON {table_or_view_name|DATABASE}
[FOR EACH ROW[WHEN condition]]
trigger_body
只有DML 觸發器(INSERT、UPDATE、DELETE)語句可以使用INSTEAD OF 觸發
器並且只有表的DML 觸發器可以是BEFORE 或AFTER 觸發器。
Ø 遊標
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14377/viewspace-897025/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【開發篇plsql】plsql遊標SQL
- 【開發篇plsql】plsql物件型別SQL物件型別
- 【開發篇plsql】plsql事務處理SQL
- 【開發篇plsql】plsql資料型別(二) recordSQL資料型別
- 要點提煉|開發藝術之IPC
- 要點提煉|開發藝術之Window
- 要點提煉|開發藝術之Animation
- 要點提煉|開發藝術之Drawable
- 要點提煉|開發藝術之ViewView
- 要點提煉|開發藝術之 Activity
- JavaWeb專案開發從0開始的要點!JavaWeb
- plsql開發語言基礎SQL
- PLSQL開發精品總結(轉)SQL
- 【開發篇plsql】plsql資料型別(一) 集合型別SQL資料型別
- 學習《PLSQL開發指南》筆記——PLSQL的基本原理SQL筆記
- 移動端網站開發要點-meta設定網站
- 農業認養APP的開發要點是什麼APP
- 要點提煉|開發藝術之效能優化優化
- 要點提煉|開發藝術之Bitmap&Cache
- 要點提煉|開發藝術之執行緒執行緒
- iOS開發ARC記憶體管理技術要點iOS記憶體
- 要點提煉|開發藝術之訊息機制
- 開發移動應用的7大設計要點
- 想做教育培訓app開發?這幾點要提前瞭解APP
- aardio 開發桌面應用,這幾點必須要掌握!
- 要點提煉|開發藝術之四大元件元件
- Java 併發程式設計要點Java程式設計
- 專案經理開會要點
- 國辦印發《2021年政務公開工作要點》
- 一線大廠Java開發所需掌握的技能要點彙總Java
- 手機/移動前端開發需要注意的20個要點前端
- 線上加油小程式如何開發 有哪些要點需要注意 遊戲開發 軟體開發 企業營銷遊戲開發
- Web前端開發技術核心思想,這兩大要點你要懂!Web前端
- 遊戲陪玩原始碼前端開發,不容忽視的五個要點遊戲原始碼前端
- 分享開發HTML5手機遊戲的5個注意要點HTML遊戲
- 短影片app開發中存在的哪些要點是必須明確的?APP
- 對於新手而言,PHP開發選擇什麼開發工具,及PhpStorm的特性和Git整合要點PHPORMGit
- 學習《PLSQL開發指南》筆記——條件和序列控制SQL筆記