一、什麼是PL/SQL,它包含什麼內容
PL/SQL是過程語言與結構化產村語言(SQL)結合而成的編程語言
1.包含:
①變量和類型
②控制語句
③子程序和函數
④對象類型和方法
二、PL/SQL體系結構及執行流程
1.將PL/SQL塊送給oracle服務器
2.oracle服務器啟動PL/SQL引擎
3.oracle過程語句 發送給 過程語句執行器
4.執行過程語句
5.引擎將 SQL語句 發送給 SQL語句執行器
6.執行SQL語句
7.將結果發送給客戶
三、關於PL/SQL塊
PL/SQL塊是構成PL/SQL程序的基本單元,將邏輯上相關的聲明和語句合在一起
1.PL/SQL分為三個部分:
①聲明部分
②課執行部分
③異常處理部分
語法:
[declare
declarations]
begin
executable statements
[exception
handlers]
end;
例如:設置變量v_name,利用程序包輸出同學們上午好
(||為連接符,等價於字符串中的+,:=為賦值,dbms_output,put_line為輸出語句)
declare
v_name varchar2(10):=’同學們’;
begin
dbms_output.put_line(v_name || ‘上午好’);
end;
四、變量和常量的聲明
語法:variable_name [cinstant] date_type[(size)] [:=init_value];
示例:constant 常量 date_type 數值類型
declare
v_name varchar2(20) :=’施敬超’; —姓名
v_sal number default 10000; —月收入
c_rate constant number(4,3):=0.037; —年利率
v_income number(10,3); —一年利息收入
begin
—執行部分
end;
五、常用數據類型
1.標量類型:
數字、字符、布爾值、日期時間
2.屬性類型:
%type、%rowtype
%type 以表中的字段類型作為數據類型
v_列名 表名.列名%type
%rowtype用於接收單條記錄,每列類型以行內數據為準,常用與循環遍歷時使用
v_表名_record 表名%rowtype;
六、賦值語句
teacher.tname%type 以teacher表中的tname字段類型作為數據類型
select tname,sal into v_name,v_sal
吧查詢到的tname和sal分別賦值給變量v_name,v_sal
示例:
declare
v_name teacher.tname%type;
v_sal teacher.sal%type;
begin
select tname,sal into v_name,v_sal from teacher where tno=1004;
dbms_output.putline(v_name || ‘的月工資為:’ || v_sal);
end;
七、控制結構
1.條件控制:if語句、case語句
①if語法:
if<布爾表達式> then
PL/SQL和SQL語句
elsif <布爾表達式> then
其他語句
else
其他語句
end if;
②case語法:
case 條件表達式
when 結構1 then
語句段1
when 結果2 then
語句段2
else
語句段
end case;
2.循環控制:loop循環、while循環、for循環
①loop語法:
lopp
要執行的語句
exit when<條件語句>
end loop;
②while語法:
while <布爾表達式> loop
要執行的語句
end loop;
③for語法:
for 循環計數器 in [reverse] 下限上限 loop
要執行的語句
end loop;
3.順序控制:null語句、goto語句
八、什麼時游標
游標時系統為用戶開設的一個數據緩衝區,用於存放SQL 語句的執行結果(即臨時結果集resultset)
每個游標區都有一個名字供用戶可以通過游標逐一獲取記錄
九、為什麼使用游標
由於SQL語句的結果集為數據模型,而程序設計語言為對象模型
例如JAVA只能接收單個變量或一條記錄,而無法接收結果集,所以採用變量》記錄》對象的形式轉換傳遞
步驟:
執行SQL語句》得到結果集放到游標》循環遍歷游標區》記錄一條條傳給JAVA對象
十、游標的分類
游標類型分為:靜態游標和動態游標
1.靜態游標:
在編譯時知道其select語句的游標
2.動態游標:
運行的時候動態決定執行何種查詢
十一、游標的使用
1.聲明游標:
語法:CURSOR cursor_name is query_sql;
2.打開游標:
語法:OPEN cursor_name;
3.提取游標:
使用fetcm語句實現對游標內容的讀取
variable_list必須與從游標提取的結果集類型相同
fetcm cursor_name into variable_list;
3.關閉游標:
使用close語句關閉一個游標,關閉游標後,所有資源都將被釋放
close cursor_name;
十二、游標屬性
%found
用於檢測游標是否成功,通常在fetcm語句之前使用,當游標按照查詢出一條記錄時,返回true
%isopen
判斷是否處於打開狀態,試圖打開一個已經打開或已經關閉的游標麻將會出出現錯誤
%notfound
與%found的作用相反,當按照條件無法查詢帶記錄時,返回true
%rowcount
循環執行游標讀取數據時,返回檢索出的記錄數據的行數
十三、動態和靜態SQL
1.什麼時靜態SQL:
需要在編寫PL/SQL程序時就確定的SQL語句
2.什麼是動態SQL:
在PL/SQL程序執行時生成的SQL語句
DDL 語句命令和會話控制語句不能在PL/SQL中直接使用,但是可以通過動態SQL來執行
編譯程序對動態SQL不做處理,而是在程序運行時動態構造語句,對語句進行語法分析並執行
十四、動態SQL實現
方法1:本地動態SQL
execute immediate 語句執行
語法:
execute immediate dynamic_sql_string
[into define_variable_list]
[using bind_argument_list];
dynamic_sql_string 是動態SQL語句字符串
into 子句用於接收select語句選擇的記錄值
using 子句用於綁定輸入參數變量
通過游標實現
語法:
TYPE type_cursor id ref CURSOR
[RETURN return_type];
cursor_name type_cursor;
OPEN cursor_name FOR dynamic_sql_string
[USING bind_argument_list];
dynamic_sql_string 是動態SQL語句字符串
USING 子句用於綁定輸入參數變量
方法2:DBMS_SQL程序包
通過DBMS_SQL程序包實現步驟
①將要執行的SQL語句或一個語句塊放到一個字符串變量中
②打開游標
③使用DBMS_SQL包的parse過程來分析該字符串
④使用DBMS_SQL包的bind_variable過程來綁定變量
⑤使用DBMS_SQL包的execute函數來執行語句
⑥關閉游標
十五、什麼是PL/SQL異常處理
在運行程序時出現的錯誤叫做異常
發生異常後,語句將停止執行,控制權轉移到PL/SQL塊的異常處理部分
其中,異常分類包括:
①預定義異常
語法:
BEGIN
sequence_of_statements;
EXCEPTION
WHEN <exception_name> THEN
sequence_of_statements;
WHEN OTHERS THEN
sequence_of_statements;
END;
示例:
BEGIN
update teacher t set t.comm=100/0;
EXCEPTION
WHEN ZERO_DIVIDE THEN dbms_output.put_line(‘除數為0’);
WHEN OTHERS THEN dbms_output.put_line(‘其他異常’);
END;
用戶定義異常
聲明異常:
BEGIN
RAISE e_exceptionName;
處理異常:
EXCEPTION
WHEN <exception_name> THEN
sequence_of_statements;
WHEN OTHERS THEN
sequence_of_statements;
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/223090.html