【发布时间】:2017-05-31 00:07:16
【问题描述】:
我在这里尝试使用光标,我想知道如何访问选择列中的光标字段?
我有一个实现如下,
create or replace TYPE "TABLE_TYPE_SAMPLE" AS OBJECT(
ENTITY_NAME VARCHAR2(100)
);
create or replace TYPE "TABLE_SAMPLE" AS TABLE OF TABLE_TYPE_SAMPLE;
CREATE OR REPLACE FUNCTION segmentFields(
txnId VARCHAR2)
RETURN TABLE_SAMPLE
IS
attValue VARCHAR2(20);
curStr VARCHAR2(20);
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
curStr := cur_recd.colA;
SELECT curStr into attValue FROM PER_PEOPLE_GROUPS;
flexTable.EXTEND;
flexTable(flexTable.count) := (TABLE_TYPE_SAMPLE(attValue)) ;
END LOOP;
RETURN flexTable;
END;
函数执行没有错误。但是当我尝试在查询下运行时
select * from table(segmentFields(480));
我收到以下错误,
ORA-01422:精确提取返回的行数多于请求的行数
ORA-06512:在“SEGMENTFIELDS”,第 19 行
01422. 00000 - “精确提取返回的行数超过了请求的行数”
*原因:exact fetch 中指定的数量小于返回的行数。
*操作:重写查询或更改请求的行数
我想了解一下,这个实现有什么问题。
谢谢。
【问题讨论】: