"numeric or value error"关于EF CORE调用Oracle11g的输出参数
"numeric or value error" on the output parameter of EF CORE call to Oracle11g
我按照我能得到的所有在线帮助得出了这个:
存储过程:
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;
在 .Net CORE 上,我有这些:
OracleParameter param1 = new OracleParameter
(
"param1"
, OracleDbType.Varchar2
, ParameterDirection.Input
);
OracleParameter token = new OracleParameter
(
"tkn"
, OracleDbType.Varchar2
, ParameterDirection.Output
);
cntxt.Database
.ExecuteSqlCommand($"BEGIN PROC_CMAP_UNIT_TeST(:param1, :tkn); end;", param1, token);
在我 运行 代码之后,我得到了这个愚蠢的错误:
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';
我按照我能得到的所有在线帮助得出了这个:
存储过程:
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;
在 .Net CORE 上,我有这些:
OracleParameter param1 = new OracleParameter
(
"param1"
, OracleDbType.Varchar2
, ParameterDirection.Input
);
OracleParameter token = new OracleParameter
(
"tkn"
, OracleDbType.Varchar2
, ParameterDirection.Output
);
cntxt.Database
.ExecuteSqlCommand($"BEGIN PROC_CMAP_UNIT_TeST(:param1, :tkn); end;", param1, token);
在我 运行 代码之后,我得到了这个愚蠢的错误:
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';