gpt4 book ai didi

c# - C# 中的 PLSQL 过程参数

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:42 29 4
gpt4 key购买 nike

我们的 Oracle (11.2.0.4) db 有一个包 XXXX,我需要调用其中一个函数:

function GET_CLOB(
P_TYPE OUT varchar2,
P_MSG OUT varchar2,
P_BODY OUT clob
) return pls_integer;

我尝试在 C# 中使用以下代码调用它:

var cm = con.CreateCommand();
cm.CommandText = "Z$XXX.GET_CLOB";
cm.CommandType = CommandType.StoredProcedure;
cm.BindByName = true;
cm.Parameters.Add("Return_Value", OracleDbType.Int16,
ParameterDirection.ReturnValue);
cm.Parameters.Add("P_TYPE", OracleDbType.Varchar2, 128).Value = "ForExDealRcvRq";
cm.Parameters.Add("P_MSG", OracleDbType.Varchar2, 128,
ParameterDirection.Output);
cm.Parameters.Add("P_BODY", OracleDbType.Clob, ParameterDirection.Output);
cm.ExecuteScalar();

当没有数据要从数据库中检索时,代码执行正常并且我得到返回值,这意味着基础表是空的。但是当有数据要检索时,我得到以下错误:

ORA-01017: Invalid Username/Password
ORA-06512: "IBS.RTL", line 6505
ORA-06512: "IBS.RTL", line 6515
ORA-06512: "IBS.Z#aaaa", line 465
ORA-06512: "IBS.Z$bbbb", line 71
ORA-06512: "IBS.Z$bbbb", line 121
ORA-06512: "IBS.Z$XXXX", line 433
ORA-06502: PL/SQL: : character string buffer too small
ORA-06512: line 1

我试过调整参数类型和大小,但无能为力。有什么建议去哪里看吗?

最佳答案

我认为您应该为所需的参数设置大小,因为这个错误ORA-06502: PL/SQL::character string buffer too small 可能是由于您没有设置参数大小引起的。

从您的代码中,我注意到您没有为参数 "P_MSG" 设置大小,只是将参数值设置为 128。

这是您用来添加"P_MSG" 参数的重载。

Add(string name, OracleDbType dbType, object val, ParameterDirection dir)

此方法使用提供的名称、数据库类型、参数值和方向将 OracleParameter 对象添加到集合中。

那么我认为你应该编写这样的示例代码

var oParam = New OracleParameter("P_MSG", OracleDbType.Varchar2);
oParam.Direction = ParameterDirection.Output;
oParam.Size = 128;
cm.Parameters.Add(oParam);

关于c# - C# 中的 PLSQL 过程参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21926500/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com