gpt4 book ai didi

types - 从自定义游标获取到集合

转载 作者:行者123 更新时间:2023-12-01 07:07:10 24 4
gpt4 key购买 nike

这感觉应该是一件简单的事情,但我似乎无法让它正常工作。我有一个现有过程 (HDT_CORE_GETDATA_LSR_V31),它返回使用以下代码构建的自定义游标:

TYPE CORE_REC IS RECORD 
(
OrgID CHAR(20 BYTE)
, DistrictCode VARCHAR2(200 BYTE)
--52 other fields
, ReqSource VARCHAR2 (1020 BYTE)
);

TYPE CORE_REC_CURSOR IS REF CURSOR RETURN CORE_REC;

我正在尝试构建一个新函数来调用此过程并将结果INSERT 到表中。

我用变量 RecordLoad 构建了新过程,它是一个基于类型的集合:

create or replace TYPE HDT_CORE_REC_V31 FORCE AS OBJECT 
(
OrgID CHAR(20 BYTE)
, DistrictCode VARCHAR2(200 BYTE)
-- Same 52 other fields; meticulously matched to be exact
, ReqSource VARCHAR2 (1020 BYTE)
);

create or replace TYPE HDT_CORE_REC_TABLE_V31 IS TABLE OF HDT_CORE_REC_V31;

在新过程中,我建立了两个变量:

    LSRData HDT_CORE_MAIN_V31.CORE_REC_CURSOR;
RecordLoad SABASC02.HDT_CORE_REC_TABLE_V31 :=
SABASC02.HDT_CORE_REC_TABLE_V31();

然后我尝试了以下方法:

  BEGIN

SABASC02.HDT_CORE_GETDATA_LSR_V31(LSRData, NULL, ParamOrgCode,'d', NULL,
NULL, NULL, NULL, NULL);

LOOP
FETCH LSRData BULK COLLECT INTO RecordLoad;
EXIT WHEN RecordLoad.COUNT = 0;

FOR indx IN RecordLoad.FIRST .. RecordLoad.LAST
LOOP
DBMS_OUTPUT.PUT_LINE('AssociateID = ' || RecordLoad(indx).AssociateID);
END LOOP;
END LOOP;

但是,这行代码:FETCH LSRData BULK COLLECT INTO RecordLoad; 抛出错误 PLS-00386: type mismatch found at 'RECORDLOAD' between 'FETCH' cursor and 'INTO'变量。

显然这里不匹配,但我不确定如何解决。我检查并仔细检查了两个构造函数之间的所有字段在名称、顺序和数据类型方面是否完全匹配。

我错过了什么?

最佳答案

CORE_REC 记录类型和 HDT_CORE_REC_V31 对象类型不是同一类型,即使它们具有完全相同的字段和属性列表。因此,您不能从返回指定记录类型的游标批量收集到对象类型的集合中。

相反,您需要将记录批量收集到记录类型集合中。

为此,您需要在 HDT_CORE_MAIN_V31 包规范中添加类似于以下内容的声明:

TYPE CORE_REC_TABLE IS TABLE OF CORE_REC;

然后将对 SABASC02.HDT_CORE_REC_TABLE_V31 的引用替换为 HDT_CORE_MAIN_V31.CORE_REC_TABLE

如果您确实需要使用对象类型而不是记录类型,您可以使用类似于以下的代码从记录类型创建对象类型实例:

declare
obj_type HDT_CORE_REC_V31;
...
begin
...
obj_type := HDT_CORE_REC_V31( rec_type.OrgID
, DistrictCode
--52 other fields
, ReqSource);
...
end;

您甚至可以创建一个返回对象类型实例的游标,方法是用对象类型构造函数包围列列表,如下所示:

select HDT_CORE_REC_V31( rec_type.OrgID
, DistrictCode
--52 other fields
, ReqSource) obj_tpe
from your_table;

但是,要使用上述查询的游标,您需要按照 TYPE CORE_OBJ_CURSOR IS REF CURSOR RETURN HDT_CORE_REC_V31 行进行不同的游标类型声明(注意:未经测试)。

关于types - 从自定义游标获取到集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35017032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com