Oracle 如何在select查询中使用光标字段
我试图在这里使用游标,我想知道如何访问select列中的游标字段 我有一个实现如下:Oracle 如何在select查询中使用光标字段,oracle,plsql,cursor,Oracle,Plsql,Cursor,我试图在这里使用游标,我想知道如何访问select列中的游标字段 我有一个实现如下: create or replace TYPE "TABLE_TYPE_SAMPLE" AS OBJECT( ENTITY_NAME VARCHAR2(100) ); 该函数没有错误。但当我试着运行下面的查询时 select * from table(segmentFields(480)); 我得到下面的错误 ORA-01422:精确提取返回的行数超过请求的行数 ORA-06
create or replace TYPE "TABLE_TYPE_SAMPLE" AS OBJECT(
ENTITY_NAME VARCHAR2(100)
);
该函数没有错误。但当我试着运行下面的查询时
select * from table(segmentFields(480));
我得到下面的错误
ORA-01422:精确提取返回的行数超过请求的行数ORA-06512:在“分段字段”第19行
142200000-“精确提取返回的行数超过请求的行数”
*原因:精确提取中指定的行数小于返回的行数。
*操作:重写查询或更改请求的行数 我想了解,这个实现有什么问题 谢谢。第行错误: 从PER_PEOPLE_Group中选择curStr to attValue 执行代码的那个?每个人组的
中有多少行
错误表示不止一个
。您可能需要在where子句中添加一个条件?问题在于select into。不知道为什么会这样。光标的值在cur_recd.cola中可用,您可以直接使用它
create or replace function segmentfields(txnid varchar2) return table_sample is
flextable table_sample := table_type_sample();
cursor cur_seg is(
select cola
from table1 -- (table name has column colA)
where id = txnid);
begin
for cur_recd in cur_seg
loop
flextable.extend;
flextable(flextable.count) := (table_type_sample(cur_recd.cola));
end loop;
return flextable;
end;
此查询没有WHERE子句:
SELECT curStr into attValue FROM PER_PEOPLE_GROUPS;
这意味着它将返回PER_PEOPLE_组中所有行的点击数。选择。。。INTO构造填充单个变量,因此需要一个只返回一行的查询。ORA-01422消息表明您没有执行精确的获取,这显然是因为PER_PEOPLE_组有多行
几种可能的解决方案,取决于您试图实现的目标:
添加某种类型的限制,以便只从peru PEOPLE\u组返回一行
改为使用大容量收集来填充任何数组
将选择替换为一个简单的赋值flexTable(flexTable.count):=(TABLE\u TYPE\u SAMPLE(cur\u recd.colA))
从表面上看,放弃SELECT似乎是最好的选择,因为它不会为您提供任何信息。然而,您似乎也在尝试实现其他一些未在发布的代码中表达的业务逻辑,因此您可能需要进行一些更改。Hi APC,您的批量导入建议已经奏效。类型段是当前段%ROWTYPE的表;l_柱段_aat;从PER_人员组中选择curStr BULK COLLET into l_列@SatyajeethT-如果这个答案对你有用,请投票并/或接受它作为正确答案。这些行动提高了搜索的质量,从而成为未来搜索者的资源。
create or replace function segmentfields(txnid varchar2) return table_sample is
flextable table_sample := table_type_sample();
cursor cur_seg is(
select cola
from table1 -- (table name has column colA)
where id = txnid);
begin
for cur_recd in cur_seg
loop
flextable.extend;
flextable(flextable.count) := (table_type_sample(cur_recd.cola));
end loop;
return flextable;
end;
SELECT curStr into attValue FROM PER_PEOPLE_GROUPS;