使用c#从DBMS_OUTPUT.GET_LINES()获取输出

本文关键字:获取 输出 LINES OUTPUT DBMS 使用 GET | 更新日期: 2023-09-27 18:04:20

我知道如何从DBMS_OUTPUT.GET_LINE()获得输出。

可以参考http://oradim.blogspot.com.tr/2007/05/odpnet-tip-retrieving-dbmsoutput-text.html

在本页中,还通过使用ODP.Net解释了从DBMS_OUTPUT.GET_LINES()方法获取输出。是否有办法只使用ADO.NET来管理这个问题?

例如,我如何读取

下面的所有输出?
begin 
 declare 
   stage number := 0; 
   begin
    DBMS_OUTPUT.PUT_LINE('STARTING:'); 
    INSERT INTO Country ( code, name) VALUES (1 , 'xxxx');
    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; 

输出应该像这样:

STARTING
DONE
我有这个代码块,但它只返回第一个输出行
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;  
    cmd.CommandText = script;
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.Add(status);
    cmd.Parameters.Add(line );
    cmd.ExecuteNonQuery();
    string status = status.Value.ToString();
    string line = line.Value.ToString();
}
输出:

STARTING

使用c#从DBMS_OUTPUT.GET_LINES()获取输出

DBMS_OUTPUT。GET_LINE只返回缓冲区的第一行(并删除它)。如果使用此方法,则需要对每行调用一次。如果没有行可用,返回状态为1。