c# - C#获取oracle存储过程标准输出的方法

标签 c# oracle stored-procedures

我正在尝试获取从 Oracle 存储过程返回的 C# 中的标准输出。 dbms_output.put_line('你好词') 我使用的 C# 代码是

using (OracleConnection con = new OracleConnection())
{
    con.ConnectionString = My_connection_string;               
    con.Open();
    OracleCommand cmd = new OracleCommand("tmp_test", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.BindByName = true;
    var result = cmd.ExecuteScalar();
} 

oracle存储过程代码为

create or replace procedure tmp_test as
v_count integer;
begin
dbms_output.put_line('Hello Word');
end; 

存储过程成功执行,但我无法取回 Hello Word。

最佳答案

经过一番努力,我设法找到了答案并决定发布可能对其他人有帮助的信息。

using (OracleConnection con = new OracleConnection())
{
    con.ConnectionString = My_connection_string;               
    con.Open();
    OracleCommand cmd = new OracleCommand("tmp_test", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.BindByName = true;
    var result = cmd.ExecuteScalar();

    //it is included dbms_output
    cmd.CommandText = "begin dbms_output.enable (1000); end;";
    cmd.CommandType = CommandType.Text;
    cmd.ExecuteNonQuery();

    string out_string;
    int status = 0;
    cmd.CommandText = "BEGIN DBMS_OUTPUT.GET_LINE (:out_string, :status); END;";
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.Clear();
    cmd.Parameters.Add("out_string", OracleType.VarChar, 32000);
    cmd.Parameters.Add("status", OracleType.Double);
    cmd.Parameters[0].Direction = System.Data.ParameterDirection.Output;
    cmd.Parameters[1].Direction = System.Data.ParameterDirection.Output;
    cmd.ExecuteNonQuery();
    out_string = cmd.Parameters[0].Value.ToString();
    status = int.Parse(cmd.Parameters[1].Value.ToString());
}

关于c# - C#获取oracle存储过程标准输出的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27837853/

相关文章:

database - Oracle自动授予权限

mysql - 连接如何在 MySQL 存储过程中工作?

java - 如何在 java 中创建具有来自 3 个表的记录的数据结构?

sql - 将数据库从 MS SQL 迁移到 MySql - 耗时/困难程度如何?

sql - SQL 存储过程中的 "referencing old"和 "referencing new"有什么区别?

c# - 确保移动设备的身份验证安全

c# - 为什么 Apache ActiveMQ 不适合 .NET 开发人员?

c# - 在表插入上显示窗口气球通知

c# - Entity Framework - 根据另一个表中的 ID 获取实体名称

sql - 用于验证特定数字的正则表达式