- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我试图从过程中返回两个引用游标,但遇到了一些麻烦。我想要做的是从第一个游标中获取信息,从中选择几个字段并加入其他一些信息并将结果粘贴到表变量中......然后从该表中选择不同的项目到第二个光标。但是我无法编译它。有人可以告诉我我做错了什么吗?
type T_CURSOR is REF CURSOR
procedure FetchSL3Details_PRC
(
c_items out T_CURSOR,
c_identifiers out T_CURSOR,
p_niin in char
) as
v_idents IDENTIFIER_TABLE_TYPE:= IDENTIFIER_TABLE_TYPE();
BEGIN
open c_items for
select
its.item_set_id,
its.niin,
its.parent_niin,
its.commodity_id,
its.service_type,
its.sl3_type,
its.qty,
its.created_id,
its.created_dt,
its.modified_id,
its.modified_dt
from
item_set its
start with its.niin = p_niin
connect by prior its.niin = its.parent_niin;
for item in c_items loop
v_idents.extend;
v_idents(v_idents.LAST) := identifier_row_type(item.commodity_id,
get_group_name_fun(item.commodity_id),
0);
v_idents.extend;
v_idents(v_idents.LAST) := identifier_row_type(item.created_id,
get_formatted_name_fun(item.created_id),
0);
v_idents.extend;
v_idents(v_idents.LAST) := identifier_row_type(item.modified_id,
get_formatted_name_fun(item.modified_id),
0);
end loop;
open c_identifiers for
select
distinct(v.id),
v.name,
v.type
from
v_idents v;
END FetchSL3Details_PRC;
最佳答案
你不能使用这个结构:
for item in c_items loop
带有 REF CURSOR。它期望 c_items
是一个标准的 PL/SQL CURSOR
。这是您收到错误的直接原因。如果你想循环一个 REF CURSOR,据我所知,你需要使用显式的 FETCH 语句并自己处理循环条件。
此外,您所说的您正在尝试做的事情并没有多大意义。如果您从过程主体中的 c_items
游标获取数据,同时将其返回给调用者,则会造成混淆。在您的评论中,您使用了短语“选择游标”,这意味着您可能将游标视为可以重复迭代的静态集合。事实并非如此——游标代表内存中的事件查询。一旦从游标中提取了一行,就无法再次提取它。
我不确定具体建议是什么,因为我不理解代码的最终目标。如果您确实需要处理来自 c_items
的行并将其作为可用的 REF CURSOR 返回,那么唯一的选择可能是关闭并重新打开它。
关于sql - 甲骨文 11g : Using cursors inside a procedure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9770226/
我正在尝试在 64 位 Windows 7 计算机上安装 Oracle Instant Client 和 ODBC 驱动程序。 我已经下载了两个 即时客户端包 - 基本 即时客户端包 - ODBC 我
每当我在 ORACLE 中授予用户“所有权限”(下面的示例)时,这实际上做了什么? 我的理解是,它赋予用户任何权限,例如在该架构中插入、删除等,但不数据库中的任何架构? grant all privi
我目前无法访问任何 Oracle 书籍,而且我的在线搜索几乎没有返回任何结果(Google 中的 (+) 什么也没有显示)。我正在查看现有代码以向查询添加一些字段并看到: AND lookup.Loo
我的访问表如下: insert into Visit values(12, to_date('19-JUN-13', 'dd-mon-yy'), to_date('19-JUN-13 12:00 A.
我的数据格式如下: cons_Type COLUMN_NAME P (COL1) R (COL6_REFERENCE) R (C
我希望我的表根据它的 TEMPLATE_ID 对其“排序依据”列进行排序。 我希望这发生在插入时(可能通过插入触发器)。 例如,如果我运行以下插入,我应该得到下表中的值。 INSERT INTO TE
我有一个场景,我必须为低于 SQL 阈值限制的值排名负数。任何人都可以帮助我吗? Name Target Rank John 2500 -2 Hopkins 4000 -1
我想用另一个表中的随机名称更新表中的名称。表 Users 中有真实的用户名。表 tmp_users 中有编造的名字。我想用 tmp_users 表中的随机名称更新用户表中的所有名称。这个想法是用假客户
如何从匹配删除表的表中删除记录?就像,我有一个记录键表,上面写着需要从我的主表中删除的内容。我将如何编写删除语句来表示“从我的主表中删除此字段与我的删除表中的字段匹配的任何内容?” 最佳答案 如果是小
我有一个关于表创建的问题。我想将“Ono”和“Pno”的属性组合成一个新表的主键。这些都是外键,每个都来自不同的表。我是否只使用 CONSTRAINT Ono_Pno_PK PRIMARY KEY (
我的情况(简化)如下所示: 表 UNITS 在 UNITS.NAME 上有一个 PK。 (单位名称, varchar(12)) 表 DEPTS 在 DEPTS.NAME 上有一个 PK。 (部门名称,
假设我有一个带有自动递增代理键的表。 这是使用反向索引的好例子吗? 我说的对吗: 插入(到索引中)会更快......因为新值会随机插入,而不是总是进入最右边的叶子(不断强制重新平衡)。 索引查找会稍微
我试图创建一个新表 (tableB),它带有到另一个表 (tableA) 的外键约束,只是想知道是否可以创建所有需要的约束和索引。我的目标是拥有一个 create table不需要 alter tab
唯一约束列中是否可以有2个或多个空值? 最佳答案 易于检查:(答案为是) create table t1 (col1 number unique); Table T1 created. insert
如何从delphi 7(ado组件)将blob数据插入oracle xe 最佳答案 使用TAdoQuery检查这些样本组件。 直接从文件加载数据 ADOQuery1.Parameters.AddPa
我试图在表 A 上创建一个约束,以检查表 B 中是否存在一组记录。我可以使用外键,但问题是表 B 中的数据不唯一。 有没有办法在不创建触发器的情况下创建这样的约束? 编辑:我无法更改表 B 结构。 最
我正在加载一个查找员工表的表。然而,有时源文件和 Employee 表中的名称不正确匹配。 **Employee table:** Employee Name Paul Jaymes **Source
我正在寻找在相对较大的表中进行相对复杂查询的最有效方法。 概念是: 我有一个表,其中包含可以相互并行运行的阶段的记录 记录量超过 500 万(并且还在增加) 时间段从大约 5 年前开始 由于性能原因,
我已经搜索了我的问题的解决方案,这个 question describes it perfectly . Let´s say I have one table called ProjectTimeSp
如何获取 varchar2 列中允许的最大和最小长度。我必须测试来自某个远程数据库的临时表的传入数据。并且要针对特定列测试每一行值是否具有可以设置到该列中的最大值或最小值。 所以我要使用其架构详细
我是一名优秀的程序员,十分优秀!