2015-04-05 4 views
0

У меня возникли проблемы с выполнением функции в одном из моих пакетов oracle из C#. Ниже приведен код для открытия соединения и выполнения функции:Невозможно выполнить функцию oracle из C#

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, изменив синтаксис добавления параметров в команду ... но они не сработали.

Я знаю, что это легко, но теперь у меня есть блокировка мозга.

Надеюсь, кто-то может помочь.

ответ

0

Для этого вам необходимо добавить параметр к вашей функции oracle в качестве параметра OUT, а затем извлечь параметр, как вы это делаете, после использования ExecuteNonQuery. Я бы добавил параметр OUT как первый в вашей функции F_FUNCTION_1.

Смежные вопросы