如何获取C#中PL-SQL块返回的dbms.output值

本文关键字:返回 dbms output PL-SQL 何获取 获取 | 更新日期: 2023-09-27 18:26:27

我正在尝试使用System.Data.OrcaleClient执行c#中的PL-SQL块。在oracle中执行PL-SQL块时,会使用dbms.ouput打印结果。

我想在我的C#代码中得到"dbms.ouput"的结果。

请帮忙。

如何获取C#中PL-SQL块返回的dbms.output值

尝试使用dbms_output包的get_line函数。您可以创建一个过程来返回输出。类似的东西(只是一个例子):

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;

我正在使用下一种方法:

    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;
    }

多次调用它以获取多环值,因为使用System.Data.OracleClient.调用dbms_output.get_lines时出现问题