PL/SQL 編程
for update [of] [columnName]
PL/SQL 塊包括 :變量/異常聲明塊、代碼執行塊、異常處理塊
基本格式如下:
DECLARE
[變量/異常聲明塊];
BEGIN
[代碼執行塊]
[EXCEPTION
[異常處理塊]
]
END;
- 聲明變量和常量的語法
Identifier [CONSTANT] DataType [NOT NULL] [:= | DEFAULT expr];
如:relt number(5) default 5;
relt constant number(4) := 3;
- 給變量賦值的方式
使用賦值語句 :=
如: [VariableName] [DataType] := [value];
[VariableName] := [value];
使用 SELECT INTO 語句
如:select [A ColumnName] into [A VariableName] from [TableName] where [Conditions]; --要求返回值必須是單行單列的值
3. LOB 數據類型
DBMS_LOB.READ(clob_var,amount,offset,output_var);
clob_var 存放CLOB數據的變量
output_var 用於存放從CLOB變量中截取出的值
amount 要讀取的字符數
offset (相對起始位置)偏移量
- 關於 %TYPE 與 %ROWTYPE 的使用
%TYPE 引用變量和數據庫列的數據類型
%ROWTYPE 提供表示表中一行的記錄類型
如: variable Table.Column%TYPE;
rowvariable Table%ROWTYPE;
- 關於邏輯比較
= <> != < > <= >=
- 條件控制語句
- IF
if [Condition expr] then
elif
[Commands]
...
else
[Commands]
end if;
- CASE
case '&variable'
when [value] then
[Commands];
...
else
[Commands];
end case;
- 循環控制語句
- LOOP 無條件循環
loop
[Commands];
end loop;
- WHILE 根據條件循環
while [Condition expr] loop
[Commands];
end loop;
- FOR 循環固定的次數
for [variable] in [reverse] [variable array | value1..value2] loop
[Commands];
end loop;
- 順序控制語句
- GOTO 無條件跳轉
BEGIN
<<FLAG>>
[Commands];
goto QUIT;
goto FLAG;
<<QUIT>>
NULL;
END;
- NULL 空語句
在任何語句塊都可使用 NULL; 來充當一條語句
- 動態 SQL
指在PL/SQL程序執行時生成的SQL語句,編譯程序對動態SQL不做處理,而是在程序運行時動態構造語句、對語句進行語法分析並執行。
DDL 語句命令和會話控制語句不能在PL/SQL中直接使用,但是可以通過動態SQL來執行。
基本語法如下:
EXECUTE IMMEDIATE dynamic_sql_string
[INTO define_variable_list]
[USING bind_argument_list];
-- list中有多個變量,用 ',' 分隔
如:
declare
sql_str varchar2(100);
sid student.sid%type;
sname student.sname%type;
begin
sid := '&sid';
sname := '&sname';
execute immediate 'insert into student(sid,sname) values(:sid,:sname)' using sid,sname;
commit;
end;
--以上SQL語句中 values() 裏的 ‘:sid’ 表示的是一個變量(‘sid’是變量名,該變量名可隨意,但不可省略),該變量的值順序對應 using 後跟着參數列表裏的值。
10. 異常
在運行程序時出現的錯誤叫做異常,發生異常後,將停止執行,控制權轉移到PL/SQL塊的異常處理部分。
拋出異常的方式:
-使用 RAISE 關鍵字
異常有兩種類型:預定義異常、用戶定義異常
-預定義異常
TOO_MANY_ROWS 等
-用戶定義異常
定義異常的方式與定義變量的方式相同
exceptionname EXCEPTION; --EXCEPTION 是異常類型
如:
myexception EXCEPTION;
其他:
others 表示其他異常,必須用於所有異常處理的結尾(即最後一個異常處理)
sqlerrm 表示異常信息
例子:
declare
myexception exception;
otherexception exception;
begin
-- raise myexception;
raise otherexception;
exception
when myexception then
dbms_output.put_line('get a exception !');
when others then
dbms_output.put_line('get a other exception !');
end;
- 引發程序錯誤
RAISE_APPLICATION_ERROR(error_number,error_message);
-用於創建用戶定義的錯誤信息
-可以在可執行部分和異常處理部分使用
-錯誤編號必須介於 -20000 和 -20999 之間
-錯誤消息的長度可長達 2048 個字節