Oracle存儲過程模版

create or replace PROCEDURE PROC_ANJOULEE_DEMO (
 BEGINTIME IN DATE , ENDTIME IN DATE DEFAULT sysdate, msg out varchar2  )
AS 
    --聲明變量
    V_CHvIPFACTNAME_COUNT NUMBER ;
    V_CHIPFACTNAME VARCHAR2(30);
    V_OBJ DICT_STB%ROWTYPE; --聲明對象變量
    v_currentTime DATE;
    e_exception exception; --聲明異常  
    e_code number; --異常編碼  
    e_msg varchar2(1000); --異常信息 
    ceshi int;

    --創建遊標
    CURSOR cursor_name IS  SELECT  DISTINCT CHIPFACTNAME FROM DICT_STB;
    BEGIN
        --FOR循環方式
        FOR cur IN cursor_name LOOP 
            SELECT  
            --查詢數據賦值到聲明的變量中
            count(1) into V_CHvIPFACTNAME_COUNT 
            FROM DICT_STB 
            --在sql中可以使用遊標中值
            where CHIPFACTNAME=cur.CHIPFACTNAME;  
            --輸出數據
            DBMS_OUTPUT.PUT_LINE(cur.CHIPFACTNAME||'--的數量:'|| V_CHvIPFACTNAME_COUNT||begintime); 
            
        IF cur.CHIPFACTNAME = '國科' THEN
            BEGIN
                SELECT SYSDATE INTO v_currentTime FROM DUAL;
                DBMS_OUTPUT.PUT_LINE('-----------當前時間1是:'||v_currentTime);
            END;
        ELSIF cur.CHIPFACTNAME = '上海高清' THEN
            BEGIN
                SELECT SYSDATE INTO v_currentTime FROM DUAL;
                DBMS_OUTPUT.PUT_LINE('-----------當前時間2是:'||v_currentTime);
            END;
        ELSE
            BEGIN
                SELECT SYSDATE INTO v_currentTime FROM DUAL;
                DBMS_OUTPUT.PUT_LINE('..........');
            END;
        END IF;
    END LOOP;
  
    --查詢一行數據到一個對象變量
    BEGIN 
        SELECT  * into V_OBJ FROM DICT_STB where id=99;
        DBMS_OUTPUT.PUT_LINE('>>>>>>>對象變量'||v_obj.id||v_obj.FACTORY);
    END;
    
    BEGIN
        -- 調用其他存儲過程  直接用存儲過程名稱調用即可
    END;
    
    BEGIN
        -- 調用有返回參數存儲過程 直接調用,需要在父存儲過程中定義子存儲過程中返回的參數爲變量即    可
    END;
    
    BEGIN
        DBMS_OUTPUT.PUT_LINE('-----');
    END;
    
 
    BEGIN
        --調用存儲過程,直接調用存儲過程名稱
        --子存儲過程如果沒有commit,可以再此一次commit
        --proc_call;
        --增加,刪除,修改需要在此commit
        --commit;
        DBMS_OUTPUT.PUT_LINE('調用存儲過程,直接調用存儲過程名稱');

    END;
  
    ----異常處理
    BEGIN
        ceshi := 1/0;  
        exception
            when e_exception then  
            e_code := SQLCODE;  
            e_msg := SUBSTR(SQLERRM, 1, 200);   
                DBMS_OUTPUT.PUT_LINE('??????????異常'||e_code||e_msg);
            when others then  
                e_code := SQLCODE;  
                e_msg := SUBSTR(SQLERRM, 1, 200);   
                DBMS_OUTPUT.PUT_LINE('??????????異常'||e_code||e_msg);
                
    --出參
    msg:=e_msg;

    END;
  
END PROC_ANJOULEE_DEMO;

 

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