【发布时间】:2018-02-16 09:19:11
【问题描述】:
我有一个简单的查询:
SELECT MEASURE_ID, MEASURE_VALUE FROM MY_TABLE;
目前只返回几条记录(将来会有很多):
8 265.7
7 559.6
此类表上的 DESC 提供:
Name Null Type
------------ -------- ------------
MEASURE_ID NOT NULL NUMBER
MEASURE_VALUE NUMBER(10,1)
然后我定义了正确的 PL/SQL 类型:
CREATE OR REPLACE TYPE HASHMAP_NUM_TYPE_OBJ AS OBJECT (
THE_ID NUMBER,
THE_VALUE NUMBER(10,1)
);
CREATE OR REPLACE TYPE HASHMAP_NUM_TYPE IS TABLE OF HASHMAP_NUM_TYPE_OBJ;
并尝试使用 BULK COLLECT 获取记录:
stats_by_measure HASHMAP_NUM_TYPE;
...
OPEN cursor_1 FOR
SELECT MEASURE_ID, MEASURE_VALUE
FROM MY_TABLE;
...
FETCH cursor_1 BULK COLLECT INTO stats_by_measure;
...
CLOSE cursor_1;
但是我遇到了 Oracle -6504 错误。我做错了什么?
备注:如果我逐行获取相同的游标,使用这样的代码块:
foo NUMBER;
faa NUMBER(10,1);
my_obj HASHMAP_NUM_TYPE_OBJ;
...
LOOP
FETCH cursor_1 INTO foo, faa;
my_obj := HASHMAP_NUM_TYPE_OBJ(foo,faa);
EXIT WHEN cursor_1%NOTFOUND;
END LOOP;
一切正常!
【问题讨论】:
-
你为什么首先将行提取到数组中?你会怎么处理他们?我也想知道你为什么使用 ref 游标而不是显式(即“正常”)游标甚至隐式游标?
-
你说得对,当然没必要。这只是我们应用的一种架构模式(在这种情况下没有任何理由),以便能够从“纯 PL/SQL 范式”切换到“Hibernate fetch cursor”范式(如果需要)。
标签: oracle plsql cursor bulk-collect