一、存儲過程定義
create or replace procedure P_TEST(beginDate DATE,
endData DATE) IS
--聲明變量
CURSOR CUR_MDATA IS
SELECT A.*
FROM myTable A
WHERE A.TIME BETWEEN beginDate AND endData
ORDERBY A.TIME;
REC_MYDATA myTable%ROWTYPE; --本天開始的行記錄
BIT_OIL_TYPE varchar2(10) := '';
ZJ_YXSC_MONTH_QINGNUMBER := 0;
BEGIN
--存儲過程體
END P_TEST;
二、遊標
1.直接聲明遊標
OPEN CUR_MDATA ;
LOOP
FETCH CUR_MDATA
INTO REC_MYDATA;
EXITWHEN CUR_D7II%NOTFOUND;
--循環中做的事情
END LOOP;
2.函數動態聲明
CURSOR COUNT_DEPTIS_NULL(STARTTIME DATE,ENDTIME DATE) IS
SELECTCOUNT(*)
FROM DT711 A1
WHERE A1.TIME BETWEEN STARTTIME ANDENDTIME;
BEGIN
OPEN COUNT_IS_NULL('1', '10',BC_HANGCI_RECORD.STARTTIME,BC_HANGCI_RECORD.ENDTIME);
FETCH COUNT_IS_NULL
INTO P_COUNT_GL_Q;
CLOSE COUNT_IS_NULL;
End;
三、for循環
FOR REC_DT711_FOR_YHZB IN (SELECT *
FROM DT711) LOOP
--循環體通過 REC_DT711_FOR_YHZB.paramName 取值
End loop;
四、異常處理(是否還在用select count(*) 判斷是否有數據,通過異常捕獲會更簡單一些)
1.當我們需要遍歷某個表中的數據,或通過select into 給某個變量賦值時,下面這種情況會拋出no_data_found異常,以前我會用select count(pid) into countPerson進行前期判斷,判斷countPerson 是否大於0,這樣不僅增加了代碼的冗餘,還是代碼可讀性變差。
2.通過下面處理讓代碼變得清爽:
Begin
--可能出現異常
for rec_person_id in(select pid from t_person)loop
--處理邏輯
end loop;
Exception when no_data_found then
--處理邏輯
DBMS.OUTPUT_PUTLINE("沒有數據");
End;