PL/SQL:记录 / 集合例子
2017-07-17 10:29
357 查看
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;
end if;
-- 写法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;
/
相关文章推荐
- 源码-Oracle数据库管理-第十四章-记录与集合-Part 1(使用PL/SQL记录)
- 源码-Oracle数据库管理-第十四章-记录与集合-Part 2(使用PL/SQL记录)
- JAVA_WEB Oracle 10g学习: PL/SQL集合与记录
- 第五章 PL/SQL集合与记录
- PL/SQL复合数据类型(集合与记录)
- 源码-PL/SQL从入门到精通-第八章-记录与集合-Part 2
- 源码-PL/SQL从入门到精通-第八章-记录与集合-Part 3
- PL/SQL集合与记录
- PL/SQL嵌套记录与记录集合
- PL/SQL 嵌套记录与记录集合
- PL/SQL 记录集合IS TABLE OF的使用
- PL/SQL 记录集合IS TABLE OF的使用
- PL/SQL 记录集合IS TABLE OF的使用
- 第五章 PL/SQL集合与记录
- PL/SQL 记录与集合
- 源码-PL/SQL从入门到精通-第八章-记录与集合-Part 1
- 学习pl/sql(语句块)的几个例子
- PL/SQL实现JAVA中的split()方法的例子
- PL/SQL 记录(Record)
- Oracle PL/SQL 中内嵌集合对象的使用