SQL/PLSQL:oracle存储过程 集合类型 代码示例

程序代码示例:

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;
/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值