Как получить значение dbms.output, возвращаемое блоком PL-SQL в C # - PullRequest
1 голос
/ 03 марта 2012

Я пытаюсь выполнить блок PL-SQL в c #, используя System.Data.OrcaleClient.Блок PL-SQL при выполнении в oracle печатает результат, используя dbms.ouput.

Я хочу получить этот результат "dbms.ouput" в моем коде C #.

Пожалуйста, помогите.

Ответы [ 2 ]

4 голосов
/ 03 марта 2012

Попробуйте использовать get_line функцию пакета dbms_output. Вы можете создать процедуру для возврата результата. Примерно так (просто пример):

procedure call_with_output(p_output out varchar2) is
  vret integer := 0;
  vtxt varchar2(4000);
begin
  dbms_output.enable;
  -- here call code that generate lines
  -- use the loop to retrieve info
  while vret = 0 loop
    dbms_output.get_line(vtxt, vret);
    if vret = 0 then
      if p_output  is null then
        p_output := vtxt;
      else
       p_output := p_output || chr(10) || vtxt;
      end if;
    end if;
  end loop;
  dbms_output.disable;
end;
1 голос
/ 06 сентября 2012

Я использую следующий метод:

    private string GetDbmsOutputLine()
    {
        OracleCommand command = new OracleCommand
        {
            Connection = <connection>,
            CommandText = "begin dbms_output.get_line(:line, :status); end;",
            CommandType = CommandType.Text
        };

        OracleParameter lineParameter = new OracleParameter("line",  
            OracleType.VarChar);
        lineParameter.Size = 32000;
        lineParameter.Direction = ParameterDirection.Output;
        command.Parameters.Add(lineParameter);

        OracleParameter statusParameter = new OracleParameter("status",  
            OracleType.Int32);
        statusParameter.Direction = ParameterDirection.Output;
        command.Parameters.Add(statusParameter);

        command.ExecuteNonQuery();

        if (command.Parameters["line"].Value is DBNull)
            return null;

        string line = command.Parameters["line"].Value as string;

        return line;
    }

Вызовите его несколько раз, чтобы получить значение из нескольких строк, потому что существуют проблемы с вызовом dbms_output.get_lines с System.Data.OracleClient.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...