You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过OracleDataReader在C#中获取PL/SQL的输出结果?

问题原因及解决方案

你的问题核心在于**OracleDataReader只能读取SQL查询返回的结果集**,而dbms_output.put_line的输出不属于结果集范畴,所以用ExecuteReader根本拿不到这些内容。

要获取dbms_output的输出,你需要通过dbms_output.get_lines这个存储过程来提取,具体步骤如下:

  • 显式启用会话级别的dbms_output(避免依赖外部设置)
  • 执行你的PL/SQL输出块
  • 调用dbms_output.get_lines提取输出内容

以下是修正后的完整代码:

ConnectDB();
OracleCommand command = conn.CreateCommand();

// 1. 启用dbms_output,确保会话生效
command.CommandText = "begin dbms_output.enable(); end;";
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();

// 2. 执行输出内容的PL/SQL块
command.CommandText = "begin dbms_output.put_line('Output'); end;";
command.ExecuteNonQuery();

// 3. 获取dbms_output的输出
command.CommandText = "declare " +
                      "  v_lines dbms_output.chararr; " +
                      "  v_num_lines integer; " +
                      "begin " +
                      "  v_num_lines := 100; -- 最多获取100行输出 " +
                      "  dbms_output.get_lines(v_lines, v_num_lines); " +
                      "  :output_lines := v_lines; " +
                      "  :output_count := v_num_lines; " +
                      "end;";

// 绑定输出参数
OracleParameter linesParam = new OracleParameter("output_lines", OracleDbType.Varchar2, 32767, ParameterDirection.Output);
linesParam.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
linesParam.Size = 100;
command.Parameters.Add(linesParam);

OracleParameter countParam = new OracleParameter("output_count", OracleDbType.Int32, ParameterDirection.Output);
command.Parameters.Add(countParam);

command.ExecuteNonQuery();

// 处理输出结果
int outputCount = (int)countParam.Value;
string[] outputLines = (string[])linesParam.Value;

for (int i = 0; i < outputCount; i++)
{
    MessageBox.Show(outputLines[i]);
}

if (outputCount == 0)
{
    MessageBox.Show("No output");
}

conn.Close();

关键说明

  • 使用ExecuteNonQuery执行PL/SQL块,因为这类块不返回结果集
  • dbms_output.get_lines需要通过绑定PL/SQL关联数组类型的参数来接收输出
  • 可调整v_num_lines和参数Size来控制最多获取的行数

内容的提问来源于stack exchange,提问作者Jogi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:52:06