(一)關於編寫預存程序需要注意以下幾點:
1>賦值符號 :=
邏輯等 =
2>注釋單行代碼用 --
注釋代碼塊用 /*---*/
3>字串串連符 ||
4>變數在變數聲明區內進行聲明:IS和BEGIN之間
5>變數聲明方式通常有如下三種:
1)單個變數
mo_flag NUMBER :=0;
content TABLE.CONTENT%TYPE;
2)數組
TYPE data_type IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER; --引用形式為data_type(i)
TYPE rule_type IS RECORD (data_id TABLE.ID%TYPE,
data_name TABLE.NAME%TYPE
); --引用形式為rule_type(i).data_id
6>經常用到的一個內建函數DECODE:
DECODE(id,1,'Southlake',
2,'San Francisco',
3,'New Jersey',
4,'Seattle',
'Non-domestic')
當id是1時,返回Southlake;是2時,返回San Francisco;依次,如果都不是時,返回Non-domestic
(二)PL/SQL塊結構
1>觸發器
CREATE OR REPLACE TRIGGER trigger_name
AFTER|BEFORE INSERT|UPDATE|DELETE ON table_name
FOR EACH ROW
DECLARE
(聲明部分)
BEGIN
(程式體)
EXCEPTION
(異常處理部分)
END;
2>預存程序
CREATE OR REPLACE PROCEDURE name(參數) IS
(聲明部分)
BEGIN
(程式體)
EXCEPTION
(異常處理部分)
END;
3>函數
CREATE OR REPLACE FUNCTION func_name(參數) RETURN data_type IS
(聲明部分)
BEGIN
(程式體)
EXCEPTION
(異常處理部分)
END;
註:DECLARE在觸發器中進行變數聲明的時候需要,預存程序和函數的變數聲明時不需要
(三)應用和調試的時候需要注意以下幾種應用:
1>SET SERVEROUTPUT ON BUFFER 20000;
用dbms_output.put_line('strin_content');可以在預存程序中輸出資訊,對預存程序進行調試;
只有將serveroutput變數設為on後,資訊才能顯示在螢幕上
2>EXECUTE procedure_name;
執行一個預存程序
3>select function() from dual;
通過sql語句執行一個函數
4>DBMS_JOB.SUBMIT(job,'TEST_WARN_PROC;',sysdate,'sysdate+30/(24*60)');
表示這個Job的執行頻率是每隔30分鐘,DBMS_JOB.SUBMIT(任務號,要執行的預存程序,下次執行的時間,每次間隔的時間)
sysdate+x/24 每隔x小時執行一次
sysdate+x/(24*60) 每隔x分鐘執行一次
sysdate+x/(24*60*60) 每隔x秒執行一次
5>當報出錯誤資訊的時候,其中指出的行號說明如下:
行號的計數從關鍵字DECLARE開始,如果沒有則BEGIN語句的行號為1