PL/SQL程式設計(1)
今天也開始學習PL/SQL
PL/SQL塊結構:
PL/SQL支援兩者型別的程式:一種是匿名塊程式,另一種是命名塊程式。
這兩種程式都有宣告,執行和異常處理部分或塊。匿名塊支援批指令碼,而命名塊能提供儲存程式設計單元。
OL/SQL匿名塊程式的基本原理如下:
[DECLARE]
declaration_statements
BEGIN
execution_statements
[EXCEPTION]
exception_handing_statements
END;
/
PL/SQL對於匿名塊只要求必須有執行部分。
必須啟用SQL*PLUS SERVEROUTPUT變數將內容顯示到控制檯。
set serveroutput on size 10000;
begin
dbms_output.putline('hello word!');
end;
/
注意:
每個PL/SQL塊必須包含一些內容,至少要有一個NULL;語句,否則會使執行時編譯(也稱為分析)失敗。
SQL*PLUS支援在互動式控制檯中使用替換變數(以&符號開頭)。替換變數是變長字串或數字。永遠不要在宣告塊中賦動態值,如使用替換變數。
PL/SQL中的賦值運算子是冒號後緊跟等號。PL/SQL字串字面值用單引號分割。
ORACLE SQL*PLUS中的@符號載入和執行一個指令碼檔案。
也可以
a)在一個匿名塊的執行部分有巢狀的匿名塊程式;
b)在宣告部分包含命名塊程式,然後依次又包含同型別的巢狀程式;
c)呼叫儲存命名塊程式;
變數,賦值和運算子
變數名以字母開頭,可以包含字母,數字,$及#符號。變數只有區域性作用域。
這意味這他們只在給定PL/SQL塊的作用域中可用。列外的是巢狀的匿名塊。巢狀的匿名塊在定義塊中起作用。因此,他們可從包含快訪問變數,除非在巢狀的匿名塊中宣告瞭相同的變數。
沒有現實賦值的數字變數的宣告使得其初值為null。
可使用賦值運算子或DEFAULT保留字交替地賦初值。下面顯示了一個原型:
DECLARE
variable_name NUMBER [:= | DEFAULT] 1;
BEGIN
variable_name := 1;
END;
/
注意:
只有返回SQL資料型別的函式可在SQL語句中呼叫。返回PL/SQL資料型別的函式只能用於PL/SQL塊中。
控制結構
條件結構:PL/SQL中有兩種型別的條件結構。一種是IF語句,另一種是CASE語句。
IF語句有兩種子型別,即if-then-else和if-then-elseif-then-else.
IF語句:
下列所示為if-then-else PL/SQL塊的基本原理:
IF [NOT] lift_operand1 = right_operanf1 [[AND|OR]
[NOT] lift_operand2 = right_operanf12 [[AND|OR]
[NOT] boolean_operand ]] THEN
NULL;
ELSE
NULL;
END IF;
提示:
可以使用比較運算子和常量(如 some_boolean = TRUE)檢查BOOLRAN值是否為true,但通常不這樣用。
NVL()函式有兩個引數:第一個是變數,第二個是字面值,這個字面值可以是數值型,字串或常量值。這兩個引數必需共享相同的資料型別。
下列所示就是if-then-elseif-then-else PL/SQL塊的基本原理:
IF [NOT] lift_operand1 = right_operanf1 [[AND|OR]
NULL;
ELSEIF NOT] lift_operand1 = right_operanf1 [[AND|OR]
[NOT] lift_operand2 = right_operanf12 [[AND|OR]
[NOT] boolean_operand ]] THEN
NULL;
ELSE
NULL;
END IF;
2.。CASE語句
有兩種CASE語句:一種是簡單CASE語句,另一種是CASE搜尋語句。
下列所示為CASE語句的通用原型:
CASE [TRUE | [selector_variable]]
WHEN [criterion1 | expression1] THEN
criterion1_statements;
WHEN [criterion2 | expression2] THEN
criterion2_statements;
WHEN [criterion(n+1) | expression(n+1)] THEN
criterion(n+1)_statements;
ELSE
block_statments;
ENS CASE;
下列程式演示了CASE搜尋語句:
BEGIN
CASE TRUE
WHEN (1>3) THEN
dbms_output.put_line('one is greater than three');
WHEN (3<5) THEN
dbms_output.put_line('three is less than five');
WHEN (1=2) THEN
dbms_output.put_line('one enquals two');
ELSE
dbms_output.put_line('NOTHING WORKED');
END CASE;
END;
提示:
可以省去TRUE(因為他是預設選擇符),但最好不要這樣做,這樣做可使程式碼更清楚。
PL/SQL支援數值FOR迴圈和遊標FOR迴圈。數值FOR迴圈在定義的範圍內迭代,而遊標FOR迴圈實在SELECT語句遊標返回的杭中迭代。
數值FOR迴圈具有下列原型:
FOR I IN starting_number..ending_number LOOP
Statement;
END LOOP;
starting_number 和ending_number必需為整形。
下列例項程式顯示1――10的索引值:
BEGIN
FOR i IN 1..10 LOOP
dbms_output.put_line('the index value is ['|| i ||']');
END LOOP;
END;
遊標FOR迴圈需要一個區域性定義的CURSOR。不能使用遊標FOR迴圈迭代引用遊標(REF CURSOR)。因為要迭代引用遊標,只能使用顯示迴圈結構,如簡單迴圈和WHILE迴圈。
他具有下列原型:
FOR i IN {cursor_name[(parameter1, parameter(n+1))] | (sql_statement)} LOOP
Statemengt;
END LOOP;
下面演示瞭如何在FOR迴圈中編寫顯示遊標,並使用可下載指令碼播種的資料:
DECLARE
CURSOR c IS SELECT OBJECT_NAME FROM lianxi l;
BEGIN
FOR i IN c LOOP
dbms_output.put_line('the title is [' || i.OBJECT_NAME || ']' );
END LOOP;
END;
下面演示瞭如何在FOR迴圈中編寫隱式遊標,並使用可下載指令碼播種的資料:
BEGIN
FOR i IN (SELECT OBJECT_NAME FROM lianxi l) LOOP
dbms_output.put_line('the title is [' || i.OBJECT_NAME || ']' );
END LOOP;
END;
數值FOR迴圈具有下列原型:
FOR I IN starting_number..ending_number LOOP
Statement;
END LOOP;
starting_number 和ending_number必需為整形。
下列例項程式顯示1――10的索引值:
BEGIN
FOR i IN 1..10 LOOP
dbms_output.put_line('the index value is ['|| i ||']');
END LOOP;
END;
遊標FOR迴圈需要一個區域性定義的CURSOR。不能使用遊標FOR迴圈迭代引用遊標(REF CURSOR)。因為要迭代引用遊標,只能使用顯示迴圈結構,如簡單迴圈和WHILE迴圈。
他具有下列原型:
FOR i IN {cursor_name[(parameter1, parameter(n+1))] | (sql_statement)} LOOP
Statemengt;
END LOOP;
下面演示瞭如何在FOR迴圈中編寫顯示遊標,並使用可下載指令碼播種的資料:
DECLARE
CURSOR c IS SELECT OBJECT_NAME FROM lianxi l;
BEGIN
FOR i IN c LOOP
dbms_output.put_line('the title is [' || i.OBJECT_NAME || ']' );
END LOOP;
END;
下面演示瞭如何在FOR迴圈中編寫隱式遊標,並使用可下載指令碼播種的資料:
BEGIN
FOR i IN (SELECT OBJECT_NAME FROM lianxi l) LOOP
dbms_output.put_line('the title is [' || i.OBJECT_NAME || ']' );
END LOOP;
END;
簡單迴圈:
簡單迴圈是顯示結構。他們要求使用者管理迴圈索引和推出條件。簡單迴圈一般與區域性定義遊標語句和引用遊標(REF CURSOR)一起使用。
Oracle提供 6個遊標特性來幫助管理迴圈中的活動。其中4個遊標特性是%FOUND,%NOTFOUND,%ISOPEN和%ROWCOUNT.
下列所示為簡單迴圈的原型,使用了顯示CURSOR:
OPEN cursor_name[(paramenter1, paramenter(n+1))];
LOOP
FETCH cursor_name
INTO row_structure_variable | column_variable1 [,column_variable(n+1)];
EXIT WHEN CURSOR%NOTFOUND;
STATEMENT;
END LOOP;
CLOSE CURSOR_NAME;
下列程式模擬了對lianxi表執行遊標FOR迴圈:
DECLARE
CURSOR c IS SELECT l.object_name FROM lianxi l;
title lianxi.object_name%TYPE;
BEGIN
OPEN c;
LOOP
FETCH c INTO title;
EXIT WHEN c%NOTFOUND;
dbms_output.put_line('the title is [' || title || ']' );
END LOOP;
CLOSE c;
END;
WHILE迴圈
WHILE迴圈不同於簡單迴圈,因為它檢查進入迴圈的條件而不是推出。它設定進入控制條件(entry guard)為前置條件表示式。只有在控制條件滿足時,才能進入迴圈。
基本語法如下:
OPEN cursor_name [(paramenter1, paramenter(n+1))];
WHILE condition LOOP
FETCH cursor_name
INTO row_structure_variable | column_variable1[,column_variable(n+1)];
EXIT WHEN cursor_name%NOTFOUND;
Statement;
END LOOP;
CLOSE cursor_name;
簡單迴圈是顯示結構。他們要求使用者管理迴圈索引和推出條件。簡單迴圈一般與區域性定義遊標語句和引用遊標(REF CURSOR)一起使用。
Oracle提供 6個遊標特性來幫助管理迴圈中的活動。其中4個遊標特性是%FOUND,%NOTFOUND,%ISOPEN和%ROWCOUNT.
下列所示為簡單迴圈的原型,使用了顯示CURSOR:
OPEN cursor_name[(paramenter1, paramenter(n+1))];
LOOP
FETCH cursor_name
INTO row_structure_variable | column_variable1 [,column_variable(n+1)];
EXIT WHEN CURSOR%NOTFOUND;
STATEMENT;
END LOOP;
CLOSE CURSOR_NAME;
下列程式模擬了對lianxi表執行遊標FOR迴圈:
DECLARE
CURSOR c IS SELECT l.object_name FROM lianxi l;
title lianxi.object_name%TYPE;
BEGIN
OPEN c;
LOOP
FETCH c INTO title;
EXIT WHEN c%NOTFOUND;
dbms_output.put_line('the title is [' || title || ']' );
END LOOP;
CLOSE c;
END;
WHILE迴圈
WHILE迴圈不同於簡單迴圈,因為它檢查進入迴圈的條件而不是推出。它設定進入控制條件(entry guard)為前置條件表示式。只有在控制條件滿足時,才能進入迴圈。
基本語法如下:
OPEN cursor_name [(paramenter1, paramenter(n+1))];
WHILE condition LOOP
FETCH cursor_name
INTO row_structure_variable | column_variable1[,column_variable(n+1)];
EXIT WHEN cursor_name%NOTFOUND;
Statement;
END LOOP;
CLOSE cursor_name;
如果檢查一個開啟的CURSOR,哪WHILE條件將是cursor_name%ISOPEN.
下列程式碼演示瞭如何將%ISOPEN遊標特性用於控制進入條件:
DECLARE
CURSOR c IS SELECT l.object_name FROM lianxi l;
titel lianxi.object_name%TYPE;
BEGIN
OPEN c;
WHILE c%ISOPEN LOOP
FETCH c INTO titel;
IF c%NOTFOUND THEN
CLOSE c;
END IF;
dbms_output.put_line('the title is [' || titel || ']' );
END LOOP;
END;
下列程式碼演示瞭如何將%ISOPEN遊標特性用於控制進入條件:
DECLARE
CURSOR c IS SELECT l.object_name FROM lianxi l;
titel lianxi.object_name%TYPE;
BEGIN
OPEN c;
WHILE c%ISOPEN LOOP
FETCH c INTO titel;
IF c%NOTFOUND THEN
CLOSE c;
END IF;
dbms_output.put_line('the title is [' || titel || ']' );
END LOOP;
END;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-660035/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PL/SQL程式設計急速上手SQL程式設計
- Oralce之PL/SQL程式設計(遊標)SQL程式設計
- 原創:oracle PL/SQL程式設計基礎 上OracleSQL程式設計
- 原創:oracle PL/SQL程式設計基礎 下OracleSQL程式設計
- OCP 複習筆記之PL/SQL (1)筆記SQL
- PL/SQL 宣告SQL
- Oracle PL/SQLOracleSQL
- Oracle PL/SQL程式碼中的註釋OracleSQL
- pl/sql to_dateSQL
- PL/SQL 運算子SQL
- PL/SQL 條件SQL
- PL/SQL 迴圈SQL
- PL/SQL 遊標SQL
- 【TUNE_ORACLE】列出LOOP套LOOP的PL/SQL程式碼SQL參考OracleOOPSQL
- Oracle PL/SQL塊簡介OracleSQL
- ultraedit高亮顯示pl/sqlSQL
- Oracle 的PL/SQL語言使用OracleSQL
- PL/SQL 條件控制語句SQL
- socket程式設計(1)程式設計
- 面向sql程式設計的探索之路SQL程式設計
- [20240607]PL/SQL中sql語句的註解.txtSQL
- 使用profiler測試Oracle PL/SQL效能OracleSQL
- Linux Shell程式設計(1)Linux程式設計
- PL/SQL第二章--基本語法SQL
- PL/SQL第三章--游標SQL
- OCP 複習筆記之PL/SQL (3)筆記SQL
- 6.4. PL/SQL語法——6.4.7. 集合SQL
- pl/sql developer的一個小問題SQLDeveloper
- OCP 複習筆記之PL/SQL (2)筆記SQL
- OCP 複習筆記之PL/SQL (4)筆記SQL
- OCP 複習筆記之PL/SQL (5)筆記SQL
- ORA-06544:PL/SQL:internal error,arguments:[56319]SQLError
- Number 1 — 程式設計入門程式設計
- Linux網路程式設計(1)Linux程式設計
- sql語句的程式設計手冊(轉)SQL程式設計
- Flink實戰(六) - Table API & SQL程式設計APISQL程式設計
- Matlab AppDesigner程式設計教程第1章——物件導向程式設計MatlabAPP程式設計物件
- Oracl資料庫+PL/SQL安裝與配置資料庫SQL
- PL/SQL Developer連線到Oracle 12cSQLDeveloperOracle