Oracle存儲過程中的一些語法

一、存儲過程定義

create or replace procedure P_TEST(beginDate DATE,

                                        endData DATEIS

--聲明變量

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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章