1

私はこの簡単なクエリを持っています:

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;

すべてうまくいきます!

4

4 に答える 4

3

以下のようにカーソルクエリを変更して、同じタイプになるようにします

OPEN cursor_1 FOR
    SELECT HASHMAP_NUM_TYPE_OBJ(MEASURE_ID, MEASURE_VALUE)
      FROM MY_TABLE;
于 2018-02-16T10:32:15.033 に答える