在一个已经开始工作的代码中,我遇到了一个奇怪的问题。有一个工作过程pkg_pbrer.p_gen_pbrer_rpt,它将v_po_report作为输出游标返回。
我正试图将这个光标捕获到table_po_report_62中,这是很好的。
现在我面临的错误是
ORA-00932:不一致的数据类型:预期- got -“在游标提取语句。
为了简单理解,我省略了不必要的代码行。
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;发布于 2015-06-03 09:19:46
检查您的光标数据最近添加的记录,这可能是不可转换的甲骨文。对于exmaple,一个列varchar2的值“1000”能够被甲骨文转换成一个数字,而一个值'abc‘则不能。
发布于 2015-06-03 09:33:20
打开v_po_report以“从dual中选择1”; 将v_po_report导入table_po_report_62;
v_po_report是一个折射光标,它指向具有单列值1 (即NUMBER数据类型)的单行数据集。当您试图获取一个具有完全不同结构的记录类型时。
您基本上可以返回以下内容:
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>因此,通过正确匹配列数和数据类型,您可以这样做:
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>https://stackoverflow.com/questions/30615585
复制相似问题