对Oracle11g的EF CORE调用的输出参数上的“数字或值错误”

问题描述

我遵循了所有可以获得的在线帮助,并提出了以下建议:

存储过程:

~

在.Net CORE上,我有这些:

create or replace procedure            proc_cmap_unit_test 
(
  param1 in varchar2,tkn out varchar2
) as 
  begin
    select 'hello' into tkn from dual;
  null;
end proc_cmap_unit_test;

运行代码后,我得到了这个愚蠢的错误

ORA-06502:PL / sql:数字或值错误

有人可以告诉我我想念什么吗?谢谢!

解决方法

我不知道您使用的工具,但是-就Oracle而言,它是这样的:

您的程序:

SQL> CREATE OR REPLACE PROCEDURE proc_cmap_unit_test (param1  IN     VARCHAR2,2                                                   tkn        OUT VARCHAR2)
  3  AS
  4  BEGIN
  5     SELECT 'hello' INTO tkn FROM DUAL;
  6
  7     NULL;
  8  END proc_cmap_unit_test;
  9  /

Procedure created.

测试:

SQL> SET SERVEROUTPUT ON
SQL>
SQL> DECLARE
  2     l_out  VARCHAR2 (10);                       --> this! "hello" fits in here
  3  BEGIN
  4     proc_cmap_unit_test ('a',l_out);
  5     DBMS_OUTPUT.put_line (l_out);
  6  END;
  7  /
hello

PL/SQL procedure successfully completed.

但是,如果应该接受过程的OUT参数值的变量太小,它将失败:

SQL> DECLARE
  2     l_out  VARCHAR2 (1);                      --> this! "hello" can't fit
  3  BEGIN
  4     proc_cmap_unit_test ('a',l_out);
  5     DBMS_OUTPUT.put_line (l_out);
  6  END;
  7  /
DECLARE
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "DP_4005.PROC_CMAP_UNIT_TEST",line 5
ORA-06512: at line 4


SQL>

查看是否响起有关您工具的铃声。祝你好运!

,

问题已解决:

由于某种原因,我必须显式设置输出变量的大小。

token.Size = '10';