【发布时间】:2011-11-27 15:56:18
【问题描述】:
我创建的 Oracle 对象有问题。存储过程的目标是检索飞机上包含的所有电线或将电线列表与另一条电线列表(过去的飞机电线配置)进行比较。你会明白这可能很大……我用一张物体表做了第一次拍摄。我创建了一个 select 语句并遍历游标以在我的对象中插入值。问题出在我尝试这个时:
OPEN P_CURSOR FOR
SELECT * FROM TABLE(CAST(GET_WIRES(P_ACTUAL_HAR_LIST, P_END_IDENT_TYPES) AS TBL_TP_WIRE_LIST));
我得到 ORA-22813:操作数值超出系统限制。所以,我开始在互联网上寻找,我发现我应该使用 PIPELINED 函数,我尝试了它。但是,在 PL/SQL 上下文中不允许使用 PIPELINED 函数,所以这不适合我的问题,因为我需要在之后重新处理对象。所以,我尝试了一个全局临时表,现在我遇到了性能问题。如果他可以增加 PGA 大小,我也尝试联系 DBA,他这样做了(现在是 150mb),但我有同样的问题。也许它仍然不够大,但如果它不起作用,我不希望他重新增加它......你有一个想法,我有 1 487 761 个:
CREATE OR REPLACE
TYPE TP_WIRE_LIST_ENTRY AS OBJECT (
ATA_NUM VARCHAR2(8 BYTE),
EFFECTIVITIES VARCHAR2(4000 BYTE),
WIRE_ID VARCHAR2(50 BYTE),
DRAWING_NO VARCHAR2(25 BYTE),
END_IDENT_1 VARCHAR2(25 BYTE),
END_IDENT_2 VARCHAR2(25 BYTE),
PIN_1 VARCHAR2(25 BYTE),
PIN_2 VARCHAR2(25 BYTE),
TERM_1 VARCHAR2(25 BYTE),
TERM_2 VARCHAR2(25 BYTE),
DES_LENGTH NUMBER(6,2),
TECH_PUBS_REMARKS VARCHAR2(500 BYTE),
WIRE_CODE VARCHAR2(25 BYTE),
W_CODE VARCHAR2(3 BYTE),
AWG VARCHAR2(3 BYTE),
COLOR VARCHAR2(4 BYTE),
GA VARCHAR2(6 BYTE),
END_IDENT_DESC_1 VARCHAR2(50 BYTE),
END_IDENT_DESC_2 VARCHAR2(50 BYTE),
TECH_PUBS_REMARKS_1 VARCHAR2(500 BYTE),
TECH_PUBS_REMARKS_2 VARCHAR2(500 BYTE),
IDENT_TYPE_ID_1 VARCHAR2(10 BYTE),
IDENT_TYPE_ID_2 VARCHAR2(10 BYTE),
BUS_NAME_1 VARCHAR2(20 BYTE),
PROPERTY_COLLECTION_ID_1 NUMBER(10,0),
BUS_NAME_2 VARCHAR2(20 BYTE),
PROPERTY_COLLECTION_ID_2 NUMBER(10,0),
X_1 NUMBER(8,3),
Y_1 NUMBER(8,3),
Z_1 NUMBER(8,3),
UOM_1 VARCHAR2(10 BYTE),
X_2 NUMBER(8,3),
Y_2 NUMBER(8,3),
Z_2 NUMBER(8,3),
UOM_2 VARCHAR2(10 BYTE),
COORD_CODE_1 VARCHAR2(10 BYTE),
COORD_CODE_2 VARCHAR2(10 BYTE),
UOM_DESC_1 VARCHAR2(50 BYTE),
UOM_DESC_2 VARCHAR2(50 BYTE),
PART_NO VARCHAR2(25 BYTE),
PART_DESC VARCHAR2(50 BYTE),
WIRE_GAUGE VARCHAR2(4 BYTE),
SPEC_REFERENCE VARCHAR2(60 BYTE),
MPS_NUM VARCHAR2(25 BYTE),
PPS_NUM VARCHAR2(25 BYTE),
INSERTION_TOOL VARCHAR2(25 BYTE),
EXTRACTION_TOOL VARCHAR2(25 BYTE)
);
/
我们使用 Oracle9i 企业版 9.2.0.6.0 版
最好的问候,
【问题讨论】:
-
不清楚您为什么要使用集合。这些数据一定来自某个地方,对吧?那么它是从哪里来的呢?另外,“但是,PL/SQL 上下文中不允许使用 PIPELINED 函数,所以这不适合我的问题”是什么意思?
-
为什么你还在使用已经过时 8 年的 9i?
-
是否可以将 GET_WIRES 构建为视图而不是过程?
-
APC - 数据来自具有多个连接的 Select 语句。我需要该对象来创建一种新表。 select 语句的第一个表是另一个对象,它是根据例如飞机程序、报告类型等动态创建的。 Kevin - 否,因为语句的主表是动态的(另一个对象) Tony - 那评论未被占用。我们仍然使用 9i 的原因是因为我们的客户这样做了,仅此而已!问他们为什么不为新版本的 Oracle 付费!
-
Kevin - 不,因为要检索电线,我们必须有一个根据上下文动态的标识符列表
标签: oracle object plsql oracle9i