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;

 

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