【问题标题】:Reading DBMS_Ouptut after Executing PLSQL from jdbc从 jdbc 执行 PLSQL 后读取 DBMS_Ouptut
【发布时间】:2018-10-14 20:26:44
【问题描述】:

我需要使用 jdbc 执行 Oralce PL/SQL 语句,但我正在为如何提取数据而苦恼。

这是我的声明

DECLARE 
   l_xmltype XMLTYPE; 
   l_ctx dbms_xmlgen.ctxhandle; 
BEGIN 
   l_ctx := dbms_xmlgen.newcontext('select * from myTable where rownun < 10;); 
   dbms_xmlgen.setrowsettag(l_ctx, 'My_DATA'); 
   dbms_xmlgen.setrowtag(l_ctx, 'My_Element'); 
   l_xmltype := dbms_xmlgen.getXmlType(l_ctx) ; 
   dbms_xmlgen.closeContext(l_ctx);  
  dbms_output.put_line(l_xmltype.getClobVal); 
  dbms_output.get_lines(?, l_xmltype);
End;

还有我的代码

CallableStatement cs = connection.prepareCall(plsql);
cs.registerOutParameter(1, Types.ARRAY,"DBMSOUTPUT_LINESARRAY");
cs.execute();

Array array = null;
array = cs.getArray(1);
Stream.of((Object[]) array.getArray())
    .forEach(System.out::println);

我得到了错误

java.sql.SQLException:ORA-06550:第 1 行,第 380 列:PLS-00306:错误 调用“GET_LINES”的参数数量或类型

我不是 PL/SQL 和 jdbc 方面的专家,所以我正在努力寻找解决方案。

【问题讨论】:

  • 错误码说,什么问题。 dbms_output.get_lines 有两个参数“lines”作为 varchar2 的表,“numlines”作为输入/输出编号参数。您正在发送错误的参数。我建议将此匿名块包装到存储过程中并调用它。易于维护和阅读。

标签: java oracle jdbc plsql ojdbc


【解决方案1】:

GET_LINES 的第二个参数是一个数字,而不是 XMLTYPE。将您的呼叫更改为:

dbms_output.get_lines(?, 50);

我还展示了一个更完整的示例来说明如何做到这一点in a similar question。请注意,您还必须先添加以下调用,以启用 dbms_output 集合:

dbms_output.enable();

【讨论】:

  • 谢谢。现在它在技术上有效,但由于某种原因我的输出为空,所以现在我必须找出原因!
猜你喜欢
  • 2011-04-02
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
  • 2022-06-11
  • 2021-08-06
相关资源
最近更新 更多