Возврат значения переменной и вывод из блока кода PL / SQL в C #

1

У меня есть блок кода, и я назначаю значения переменной, чтобы отслеживать, что происходит во время выполнения блока.

begin 
 declare 
   stage number := 0; 
   begin
    stage := 1;
    INSERT INTO Country ( code, name) VALUES (1 , 'xxxx');
    stage := 2;
    INSERT INTO City ( code, name) VALUES (1 , 'yyyy');
    DBMS_OUTPUT.PUT_LINE('DONE:'); 
COMMIT; 

EXCEPTION  -- exception handlers begin 
  WHEN OTHERS THEN  -- handles all other errors 
   DBMS_OUTPUT.PUT_LINE('Error occured, rollback...');  
   DBMS_OUTPUT.get_LINE(:1, :2);
   stage := -1;
   ROLLBACK; 
  end;
end; 

Я хочу спросить вас, как я могу получить значение сцены и значение внутри DBMS_OUTPUT.PUT_LINE() с помощью С#. Я знаю, что это уже ответили, но, к сожалению, я не нашел его.

Теги:
plsql
ado.net

4 ответа

1
Лучший ответ
using (OracleCommand cmd = cnn.CreateCommand())
{
    OracleParameter status = new OracleParameter(":1", OracleType.VarChar, 32000);
    p_line.Direction = ParameterDirection.Output;

    OracleParameter line = new OracleParameter(":2", OracleType.Double);
    p_status.Direction = ParameterDirection.Output;

    OracleParameter stage= new OracleParameter("stage", OracleType.Int16);
    p_country_name.Direction = ParameterDirection.Output;    

    cmd.CommandText = script;
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.Add(status);
    cmd.Parameters.Add(line );
    cmd.Parameters.Add(stage);
    cmd.ExecuteNonQuery();

    string status = status.Value.ToString();
    string line = line.Value.ToString();
    string stage= stage.Value.ToString();
}
1

Вы можете читать DBMS_OUTPUT! Это может быть полезно для асинхронной связи

FUNCTION get_next_line RETURN VARCHAR2 
IS
return_value VARCHAR2(255);
get_status INTEGER;
BEGIN
DBMS_OUTPUT.GET_LINE (return_value, get_status);
IF get_status = 0
THEN
  RETURN return_value;
ELSE
  RETURN NULL;
END IF;
END;

Но я бы не рекомендовал его использовать в общем случае. Вам нужен выходной параметр или функция, подобная приведенному выше примеру.

  • 0
    Спасибо за ответ, но это не мой вопрос. Я спросил, как я могу прочитать переменную "stage" и DBMS_OUTPUT.PUT_LINE () в коде C #.
  • 0
    Функция является примером того, как вернуть переменную стадии. Не читайте dbms_output.put_line в вашем коде, используйте параметры.
1

Я сомневаюсь, что С# сможет читать буфер dbms_output.

Однако вы можете записать сохраненную процедуру plsql для этого кода и передать параметр из этой процедуры на С#

  • 0
    Спасибо за ответ, но это не мой вопрос. Я спросил, как я могу прочитать переменную "stage" и DBMS_OUTPUT.PUT_LINE () в коде C #.
0

Я новичок в С#. Хотите написать запрос блока PL и получить значение.

StringBuilder sb =  new StringBuilder();
sb.Append(" declare ");
sp.Append(" v_acid   varchar(10);");
sp.Append(" v_Cid    varchar(10);");
sp.Append(" begin ");
sp.Append(" select acid,cust into v_acid,v_Cid from account where       account='112111' ");
sp.Append(" end ");

Я хочу запустить PL-блок, написанный в вышестрочном файле в oracle-соединении.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню