C #: выполнить процедуру Oracle с аргументами IN и OUT и вернуть аргументы OUT - PullRequest
0 голосов
/ 24 января 2019

Я хочу выполнить хранимую процедуру, вот она:

CREATE OR REPLACE PROCEDURE TESTPROC(var1 IN VARCHAR2, var2 IN VARCHAR2, return_code OUT VARCHAR2, return_code2 OUT VARCHAR2) 
AS BEGIN

DECLARE newId number;
begin
SELECT (NVL(MAX(ID),0) + 1) into newId from CC_INT_CODA;
INSERT INTO CC_INT_CODA
   VALUES (newId, sysdate, 'BEL', '3' , var1, var2, 'AZ', 'TR', 'FG', 'QW', 'XC', 'IO', '1', '0', sysdate, 'TT', 'BB', 'OO', '8', '9', sysdate, '5', '6');
end;

return_code := 'Returntest1';
return_code2 := 'Returntest2';
END TESTPROC;

Что я хочу сделать в C #, это выполнить эту процедуру с моими IN-параметрами и вернуть два OUT-параметра в строках.

Я могу запустить его только с аргументами IN, но невозможно получить 2 аргумента OUT.

Я новичок в Oracle и C #, поэтому будьте осторожны.И извините за мой английский.

PS: я использую устаревшую сборку System.Data.OracleClient.dll, а не отдельную Oracle.

РЕДАКТИРОВАТЬ С РЕШЕНИЕМ:

Спасибо всем за ваши комментарии и ответ, наконец-то все заработало (см. Ниже).

    Results = "";

    OracleCommand oCommand = new OracleCommand();
    oCommand.Connection = oraConnection;
    oCommand.CommandText = SQL;
    oCommand.CommandType = CommandType.StoredProcedure;

    OracleParameter return_param = oCommand.CreateParameter();
    return_param.ParameterName = "return_code";
    return_param.Direction = ParameterDirection.Output;
    return_param.DbType = DbType.String;
    return_param.Size = 30;
    oCommand.Parameters.Add(return_param);
    oCommand.ExecuteReader();

    Results = return_param.Value.ToString();    
    oraConnection.Close();

1 Ответ

0 голосов
/ 24 января 2019

Вот как вы можете сделать это с помощью dapper:

DynamicParameters param = new DynamicParameters();
param.Add(name: "out_variable", dbType: DbType.Decimal, direction: ParameterDirection.Output);
...
database.Execute(query, param);
var outVariable = param.Get<Decimal>("out_variable");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...