06—PL/SQL編程
2024-07-21 02:44:49
供稿:網友
PL/SQL: Oracle中的SQL過程化編程語言
1. PL/SQL程序是由塊結構構成,格式如下:
[DECLARE
--聲明部分
]
BEGIN
-- 主體
[EXCEPTION
-- 異常處理塊
]
END;
/ --塊的結束
2.變量
簡單變量:單值變量
變量名 變量類型[:=初始值];
復合變量:先定義復合類型,然后再用來復合變量;
表類型: TYPE 類型名 IS TABLE OF 數據類型 INDEX BY BINARY_INTEGER;
變量名 表類型名;
記錄類型:TYPE 類型名 IS RECORD(變量名 類型, 變量名 類型...);
聲明變量的類型與指定表的指定列同類型:
變量名 表名.列名%TYPE;
聲明記錄類型變量的類型與指定表的行同類型:
變量名 表名%ROWTYPE;
3.條件語句
IF 條件 THEN 語句;
ELSIF 條件2 THEN 語句2;
ELSIF 條件2 THEN 語句2;
ELSE 語句n;
END IF;
4.循環語句
1) 簡單:
LOOP
語句
EXIT WHEN 條件;
END LOOP;
2) WHILE:
WHILE 條件 LOOP
語句
END LOOP;
3) FOR
FOR 數字變量 IN [REVERSE] 下限..上限 LOOP
語句
END LOOP;
5. 游標cursor:它是Oracle數據庫內的一個工作區,存放了SELECT語句的查詢集。
1) 它有一個指針,初始時指向查詢集中的首行。
2) 屬性:%found、%notfound、%rowcount、%isopen、
3) 使用步驟:
a) 聲明變量用來保存數據。
b) 聲明游標,并指定查詢。cursor v_emp_cursor is select語句;
c) 打開游標。open v_emp_cursor;
d) 一次從游標中獲取一行記錄。fetch v_emp_cursor into 變量列表;
e) 關閉游標。close v_emp_cursor;
4) for循環可以自動完成打開,獲取數據,關閉的功能。
declare
v_emp_record emp%rowtype;
cursor v_emp_cursor is select語句 [for update];
begin
for v_emp_record in v_emp_cursor loop
v_emp_record.ename;
-- 獲取游標所有在位置行 update ... where current of v_emp_cursor;
end loop;
end;
/
6. 過程(PRocedure): 有名稱,有參數的SQL程序塊。沒有返回值。
1) 創建語法:
create or replace procedure 過程名[(形參列表)]
{is|as}
[變量聲明]
begin
主體;
end;
/
2) 參數類型:in 輸入參數。out 輸出參數。in out 輸入輸出參數
3) 調用:call 過程名([實參列表]);
4) 刪除過程:drop procedure 過程名;
5) 顯示過程編譯時的問題:show errors;
7. 函數(function):跟過程類似。唯一區別是函數有返回值
1) 創建語法:
create or replace function 函數名[(形參列表)]
return 返回值類型
{is|as}
[變量聲明]
begin
主體;
end;
/
2) select 函數名([實參列表]) from dual;
3) 刪除函數:drop function 函數名;
8. 異常(exception):在塊結構中可以通過exception塊來處理異常
1) 語法:
begin
exception when others then 處理錯誤;
end;
9. 觸發器(trigger):當特定的DML語句執行時,數據庫自動執行的一種特殊過程。
1) 創建語法:
create or replace trigger 觸發器名
{before | after} {insert| [or] update |[or] delete}
on 表名 [for each row]
聲明變量;
begin
主體;
-- inserting,updating,deleting 判斷事件類型
-- emp.ename:old 訪問舊值
-- emp.enmae:new 訪問新值
end;
/
2) 不需要用戶調用,由數據庫自動調用。
10. 包(package)
1) 常用的dbms_output.put_line();