记录Record、PL/SQL表和二维数组
时间:2010-11-17 来源:tangyunoracle
一、什么是记录Record和PL/SQL表?记录Record:由单行多列的标量类型构成的临时记录对象类型。类似于多维数组。
PL/SQL表:由多行单列的索引列和可用列构成的临时索引表对象类型。类似于一维数组和键值对。两者都属于用户自定义数据类型。二、Record + PL/SQL表 用途是什么?
Record + PL/SQL表可以进行数据的多行多列存储。这样我们就可使用Record + PL/SQL表在需要时封装一个临时的表对象,进行传递和操作。通过Record自定义表结构,封装一条记录。PL/SQL表声明 可用列 类型为Record类型(将可用列指向Record类型变量),每个索引对应一个Record类型变量。三、使用Record + PL/SQL表进行数据的多行多列存储
1、声明Record类型和PL/SQL表,其中PL/SQL表的索引列为主键约束和唯一约束列或自增Integer。可用列为Record类型或%RowType类型。
2、填充PL/SQL表可用列(Record类型):通过索引指向Record,使用Record访问记录成员。语法:
PL/SQL表名(索引列值).记录成员 := 记录成员类型值;或PL/SQL表名(索引列值) := Record类型变量;
--注意其PL/SQL表中声明的可用列要和这里赋值的Record类型变量结构一样
3、访问PL/SQL表
4、属性方法:
count --返回pl/sql表的总行数;
delete --删除pl/sql表的所有内容;
delete(行数) --删除pl/sql表的指定的行;
delete(开始行,结束行) --删除pl/sql表的多行;
first --返回表的第一个INDEX;
next(行数) --这个行数的下一条的INDEX;
last --返回表的最后一个INDEX;
例:
PRO_EBFX_MAIN(SQL_IN ) ------------------------------------
TYPEISRECORD XD (),
NUMBER EBFX_TAB EBFX_REC;
---用于存放传进来的参数数组
---返回记录表
---XH:序号、Y值百分比、 EBFX_REC6 (
NUMBER XD (),
NUMBER PYD ,
NUMBER SPYD );
TYPEISTABLEOFINDEXBYBINARY_INTEGER V_EBFX_REC6 EBFX_REC6; V_EBFX_TAB6 PLSQL_TAB6; errcode ();
VARCHAR24000 V_SUMY := ; V_SUMY_TEMP := ; BEGIN
EXECUTEIMMEDIATEBULKCOLLECT
INTO DBMS_OUTPUT.put_line(DATA_TAB(i).XD || ',' || DATA_TAB(i).YD);
--------------
FORIN1LOOP
0 V_EBFX_REC6.YD := ;
0 V_EBFX_REC6.PYD := ;
0 V_EBFX_REC6.SPYD := ;
;
FORIN1LOOP
V_EBFX_TAB6(i).XD := DATA_TAB(i).XD;
V_SUMY := V_SUMY + DATA_TAB(i).YD;
ENDLOOP V_SUMY = V_SUMY := ;
ENDIF i .. DATA_TAB.COUNT V_SUMY_TEMP := V_SUMY_TEMP + DATA_TAB(i).YD;
1002 V_EBFX_TAB6(i).SPXD := ROUND(i / DATA_TAB.COUNT * , );
1002 ;
/* FOR i IN 1 .. DATA_TAB.COUNT LOOP
.XH || ',' || V_TAB_R_ARR(i).XD || ',' || V_TAB_R_ARR(i).YD || ',' || V_TAB_R_ARR(i).PYD || ',' || V_TAB_R_ARR(i).SPXD || ',' || V_TAB_R_ARR(i).SPYD);
EXCEPTION
WHENOTHERSTHEN
SQLCODE11000 errmsg := SUBSTRB(, , );
INSERTINTO (SYSTEMID, OPERETYPE, TABLENAME, ERRTYPR, OPERTIME, OPERERRMSG)
VALUES
'EB'SYSDATE'YYYYMMDDHH24MISS' LPAD(DBMS_UTILITY.get_time, , ),
'异常,
'二八分析处理异常,
,
;
;