oracle ORA-06502:PL/SQL:数值或值错误:每当我有一个OUT参数时,字符串缓冲区太小

dced5bon  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(166)

我知道已经有一些关于这个错误("ORA-06502: PL/SQL: numeric or value error: character string buffer too small" is bug?)的帖子,但我已经看过了,我似乎仍然不能找出我的代码有什么问题。
在C#中,我似乎无法使用OUT参数调用存储过程。
我有一个存储过程。

CREATE OR REPLACE PROCEDURE test_sp(v_payload OUT VARCHAR2) AS
BEGIN
    v_payload := 'he2';
END;

这真的是我能做的最简单的事情了。它在Oracle SQL Developer中运行。
在C#代码中。

OracleCommand command = new OracleCommand("test_sp", con);
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add(new OracleParameter("v_payload", OracleDbType.Varchar2, 32767, ParameterDirection.Output));
        await command.ExecuteNonQueryAsync();

它会返回这个错误
ORA-06502:PL/SQL:数值或值错误:字符串缓冲区太小

kcwpcxri

kcwpcxri1#

你使用了错误的构造函数。你使用的构造函数是:

public OracleParameter(string name, System.Data.OracleClient.OracleType oracleType, 
                       int size, string srcColumn);

看起来string srcColumn隐式地将ParameterDirection.Output转换为字符串。
试试这个:

var param = new OracleParameter("v_payload", OracleDbType.Varchar2, 32767);
param.Direction = ParameterDirection.Output;
command.Parameters.Add(param);

相关问题