SQLPLSQL:oracle存储过程 集合类型 代码示例

    xiaoxiao2021-03-25  73

    程序代码示例:

    CREATE OR REPLACE PROCEDURE test_gj_record_collection( IV_ZZJG_ID IN VARCHAR2, IV_QY_ID IN VARCHAR2, iv_sbym IN VARCHAR2 ) AS V_ROWCNT NUMBER := 0; –计数器 v_err_code varchar2(20); –错误代码 Y:错误 N:正确 –gaoj add 20160505 v_err_msg varchar2(4000); –错误信息 空 无错误 –gaoj add 20160505 v_ocur_msg SYS_REFCURSOR ;

    写法1: 集合 + 使用定义变量(简单)写法

    v_bbname VARCHAR2(50) := ’ ‘; v_bbcode VARCHAR2(30) := ’ ‘; v_ssq varchar2(6) := ’ ‘; v_no varchar2(4) := ’ ‘; v_msg2 varchar2(200) := ’ ‘; v_flag2 varchar2(1) := ’ ‘;

    写法2: 集合 + record写法

    TYPE R2 IS RECORD ( –定义记录类型 v_bbname VARCHAR2(50) , v_bbcode VARCHAR2(30) , v_ssq varchar2(6) , v_no varchar2(4) , v_msg2 varchar2(200) , v_flag2 varchar2(1) ); record_r2 R2 ; –定义记录变量

    写法3: 集合 + %rowtype

    – TYPE .. IS RECORD TYPE R3 IS RECORD ( –定义记录类型 v_bbname VARCHAR2(50) , v_bbcode VARCHAR2(30) , v_ssq varchar2(6) , v_no varchar2(4) , v_msg2 varchar2(200) , v_flag2 varchar2(1) );

    TYPE t3 IS TABLE OF R3; table_t3 t3;

    BEGIN DELETE FROM tt_chk_err; –清理临时表 pkg_sc_jc_sjyzx.p_chk_mxhz(IV_ZZJG_ID, IV_QY_ID, v_err_code, v_err_msg, v_ocur_msg); if v_err_code = ‘Y’ then insert into TT_WM_QRMX_QR (msg) values (‘调用 P_CHK_MXHZ 出现异常’||substr(v_err_msg,0,150)); return;

    写法1:使用定义变量(简单)写法

    LOOP FETCH v_ocur_msg INTO v_bbname, v_bbcode, v_ssq, v_no, v_msg2, v_flag2; exit when v_ocur_msg%notfound; IF ( nvl(v_msg2,' ') <> ' ' AND v_ssq = iv_sbym ) THEN v_rowcnt := v_rowcnt + 1; END IF; END LOOP;

    写法2:使用 record写法

    LOOP FETCH v_ocur_msg INTO record_r2; exit when v_ocur_msg%notfound; IF ( nvl(record_r2.v_msg2,' ') <> ' ' AND record_r2.v_ssq = iv_sbym ) THEN v_rowcnt := v_rowcnt + 1; END IF; END LOOP;

    写法3: 集合 + record

    FOR src IN table_t3.first .. table_t3.last LOOP exit when v_ocur_msg%notfound; IF (nvl(table_t3(src).v_msg2,' ') <> ' ' AND table_t3(src).v_ssq = iv_sbym) THEN v_rowcnt := v_rowcnt + 1; END IF; END LOOP; IF v_rowcnt > 0 THEN insert into TT_WM_QRMX_QR(bmc, msg) SELECT ' ' BMC, '汇总计算有'||v_rowcnt||'条记录与明细数据不符,请进行<数据一致性检查>' MSG FROM DUAL; END IF;

    EXCEPTION WHEN OTHERS THEN NULL; end; /

    转载请注明原文地址: https://ju.6miu.com/read-40247.html

    最新回复(0)