从 jdbc 执行 PLSQL 后读取 DBMS_Ouptut
Reading DBMS_Ouptut after Executing PLSQL from jdbc
我需要使用 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: line 1, column 380: PLS-00306: wrong
number or types of arguments in call to 'GET_LINES'
我不是 PL/SQL 方面的专家,也不是 jdbc 方面的专家,所以我正在努力寻找解决方案。
GET_LINES
的第二个参数是一个数字,而不是 XMLTYPE
。将您的呼叫更改为:
dbms_output.get_lines(?, 50);
我还展示了一个更完整的示例,说明如何执行此操作 。请注意,您还必须先添加以下调用,以启用 dbms_output
集合:
dbms_output.enable();
我需要使用 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: line 1, column 380: PLS-00306: wrong number or types of arguments in call to 'GET_LINES'
我不是 PL/SQL 方面的专家,也不是 jdbc 方面的专家,所以我正在努力寻找解决方案。
GET_LINES
的第二个参数是一个数字,而不是 XMLTYPE
。将您的呼叫更改为:
dbms_output.get_lines(?, 50);
我还展示了一个更完整的示例,说明如何执行此操作 dbms_output
集合:
dbms_output.enable();