进入对象会引发不一致的数据类型:expected - got -

时间:2018-02-26 12:15:13

标签: loops plsql cursor

是否可以迭代游标而无需将中间TABLE作为Object的类型?

我的架构中有以下EVENT_TABLE设置

create TABLE EVENT_TABLE (
       UUID INTEGER, 
       EVENT_TYPE VARCHAR2(10)
);

INSERT INTO EVENT_TABLE values( 1, 'START');
INSERT INTO EVENT_TABLE values( 2, 'RUNNING');
INSERT INTO EVENT_TABLE values( 2, 'COMPLETE');


CREATE OR REPLACE TYPE EVENT_OBJ AS OBJECT (
       UUID INTEGER, 
       EVENT_TYPE VARCHAR2(10)
);
/

COMMIT;

declare 
    r EVENT_OBJ;
    TYPE cur_typ IS REF CURSOR;
    EVENT cur_typ;
BEGIN
  OPEN event FOR 'select * from EVENT_TABLE';
  LOOP
    FETCH event INTO r;
    EXIT WHEN event%NOTFOUND;
    DBMS_OUTPUT.put_line('NEW_UID:-' || R.UUID);
  END LOOP;
END;
/   

当我在最后执行匿名块时,我得到以下异常

ORA-00932不一致的数据类型:expected - got -

我之前看到过将查询提取到对象中的示例,但我似乎无法使其工作。

通过如下创建临时表,匿名块完成并生成预期的DBMS输出?

declare 
    r EVENT_OBJ;
    TYPE cur_typ IS REF CURSOR;
    EVENT cur_typ;

    -- Temp table 
    TYPE EVENT_TBL IS TABLE OF EVENT_OBJ;
    lt_evt_tbl EVENT_TBL;

BEGIN
  select EVENT_OBJ (UUID,EVENT_TYPE ) bulk collect into lt_evt_tbl from EVENT_TABLE;
   FOR indx IN 1..lt_evt_tbl.COUNT
   LOOP
    DBMS_OUTPUT.put_line('NEW_UID:-' || lt_evt_tbl(indx).UUID);
  END LOOP;
END;
/   

0 个答案:

没有答案