首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游标提取中的ORA-00932

游标提取中的ORA-00932
EN

Stack Overflow用户
提问于 2015-06-03 09:08:33
回答 2查看 3.7K关注 0票数 1

在一个已经开始工作的代码中,我遇到了一个奇怪的问题。有一个工作过程pkg_pbrer.p_gen_pbrer_rpt,它将v_po_report作为输出游标返回。

我正试图将这个光标捕获到table_po_report_62中,这是很好的。

现在我面临的错误是

ORA-00932:不一致的数据类型:预期- got -“在游标提取语句。

为了简单理解,我省略了不必要的代码行。

代码语言:javascript
复制
DECLARE

  v_po_report SYS_REFCURSOR;

  TYPE type_po_report_62 IS RECORD (soc varchar2(1000), pt varchar2(1000), mp varchar2(1000), 
                                  blind varchar2(1000), ac varchar2(1000), placebo varchar2(1000));

  table_po_report_62 type_po_report_62; 
    --
    --
    -- Some working code
    --
    --


   -- Initializing Reference cursor    
    open v_po_report for 'select 1 from dual';

    pkg_pbrer.p_gen_pbrer_rpt (v_user_id,v_report_type,v_report_form_id,v_reg_report_id,v_po_report,v_po_case_list);

  LOOP
        FETCH v_po_report INTO table_po_report_62;
        -- Encountered ORA-00932: inconsistent datatypes: expected - got -
        EXIT WHEN v_po_report%NOTFOUND;
        insert into pbrer_output62_report (soc, pt, mp, blind, ac, placebo)
        values (table_po_report_62.soc, table_po_report_62.pt, table_po_report_62.mp, table_po_report_62.blind, table_po_report_62.ac, table_po_report_62.placebo) ;
  END LOOP;
    CLOSE v_po_report;

EXCEPTION
WHEN OTHERS THEN
   --
    --
    -- Some working code
    --
    -- 
END;
EN

回答 2

Stack Overflow用户

发布于 2015-06-03 09:19:46

检查您的光标数据最近添加的记录,这可能是不可转换的甲骨文。对于exmaple,一个列varchar2的值“1000”能够被甲骨文转换成一个数字,而一个值'abc‘则不能。

票数 0
EN

Stack Overflow用户

发布于 2015-06-03 09:33:20

打开v_po_report以“从dual中选择1”; 将v_po_report导入table_po_report_62;

v_po_report是一个折射光标,它指向具有单列值1 (即NUMBER数据类型)的单行数据集。当您试图获取一个具有完全不同结构的记录类型时。

您基本上可以返回以下内容:

代码语言:javascript
复制
SQL> var v_po_report refcursor
SQL> declare
  2   v_po_report SYS_REFCURSOR;
  3  BEGIN
  4  OPEN :v_po_report FOR 'select 1 from dual';
  5  END;
  6  /

PL/SQL procedure successfully completed.

SQL> print v_po_report

         1
----------
         1

SQL>

因此,通过正确匹配列数和数据类型,您可以这样做:

代码语言:javascript
复制
SQL> DECLARE
  2    v_po_report SYS_REFCURSOR;
  3    TYPE type_po_report_62 IS RECORD (soc NUMBER);
  4    table_po_report_62 type_po_report_62;
  5  BEGIN
  6    OPEN v_po_report FOR 'select 1 from dual';
  7    LOOP
  8      FETCH v_po_report INTO table_po_report_62;
  9      EXIT WHEN v_po_report%NOTFOUND;
 10
 11      -- do something
 12
 13    END LOOP;
 14    CLOSE v_po_report;
 15  END;
 16  /

PL/SQL procedure successfully completed.

SQL>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30615585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档