【问题标题】:Unable to execute oracle function from c#无法从c#执行oracle函数
【发布时间】:2015-04-05 23:27:28
【问题描述】:

我在从 c# 中执行我的一个 oracle 包中的函数时遇到问题。以下是我打开连接并执行函数的代码:

Decimal firstID = Decimal.Parse("2453699");// This values are just for testing
string secondID = "12345"; 
Decimal sec = Decimal.Parse("1"); 
string estatus = "TEXT"; 

OracleConnection con = new OracleConnection();
con.ConnectionString = "User Id=user;Password=the_pass;Data Source=Data_Source";

con.Open();
string sql = "Package.F_FUNCTION_1";
OracleCommand com = new OracleCommand(sql, con);
com.CommandType = System.Data.CommandType.StoredProcedure;

com.Parameters.Add("returnVal", OracleDbType.Varchar2, 32767);
com.Parameters["returnVal"].Direction = System.Data.ParameterDirection.ReturnValue;

com.Parameters.Add("v_firstID",OracleDbType.Decimal,10);
com.Parameters.Add("v_secondID", OracleDbType.Varchar2,200);
com.Parameters.Add("p_sec", OracleDbType.Decimal, 3);
com.Parameters.Add("p_estatus", OracleDbType.Varchar2,50);

com.Parameters["v_firstID"].Value = firstID;
com.Parameters["v_secondID"].Value = secondID;
com.Parameters["p_sec"].Value = sec;
com.Parameters["p_estatus"].Value = estatus;

com.ExecuteNonQuery();
string val = com.Parameters["returnVal"].Value.ToString();
con.Close();

以下是我包中的函数,需要调用同一个包中的第二个函数:

FUNCTION F_FUNCTION_1(v_firstID IN NUMBER,
                      v_secondID IN VARCHAR2
                      ,p_sec    IN NUMBER DEFAULT NULL
                      ,p_estatus IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2 AS
v_Return VARCHAR2(200) := '';
secuencia    VARCHAR2(1000) := null; 
secc        VARCHAR2(1000) := NULL;
BEGIN

-- Some validations 

v_Return := Package.F_FUNCTION_2(
v_secondID => v_secondID,
P_SEC => p_sec,
P_ESTATUS => p_estatus
);

return v_Return;
END F_FUNCTION_1;

FUNCTION F_FUNCTION_2(v_secondID IN VARCHAR2
                          ,p_sec    IN NUMBER DEFAULT NULL
                          ,p_estatus IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2 AS
 --some variables
 v_URL          VARCHAR2(500)    := NULL;
BEGIN

  --A lot of code here that works

  RETURN v_URL;
END F_FUNCTION_2;

问题是:当我运行这段代码时,我得到了错误:

ORA-01460:请求的转换未实现或不合理

我想这与参数类型有关。我尝试过更改类型,使用 ExecuteScalar 而不是 ExecuteNonQuery,更改添加到命令的参数的语法......但它们没有用。

我知道这很容易,但我现在脑子有问题。

希望有人能提供帮助。

【问题讨论】:

    标签: c# oracle function database-connection


    【解决方案1】:

    为此,您需要在 oracle 函数中添加一个参数作为 OUT 参数,然后在使用 ExecuteNonQuery 后按照您的操作提取参数。我会将 OUT 参数添加为 F_FUNCTION_1 函数中的第一个参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      相关资源
      最近更新 更多