微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我知道如何从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,'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

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐