1616 package org.utplsql.sqldev.dal
1717
1818import java.io.StringReader
19+ import java.sql.CallableStatement
1920import java.sql.Connection
2021import java.sql.ResultSet
2122import java.sql.SQLException
2223import java.util.List
2324import java.util.logging.Logger
2425import javax.xml.parsers.DocumentBuilderFactory
26+ import oracle.jdbc.OracleTypes
2527import org.springframework.dao.DataAccessException
28+ import org.springframework.jdbc.core.CallableStatementCallback
2629import org.springframework.jdbc.core.JdbcTemplate
27- import org.springframework.jdbc.core.ResultSetExtractor
2830import org.springframework.jdbc.datasource.SingleConnectionDataSource
2931import org.utplsql.sqldev.model.XMLTools
3032import org.utplsql.sqldev.model.runner.Counter
@@ -83,13 +85,22 @@ class RealtimeReporterDao {
8385 }
8486
8587 def consumeReport (String reporterId , RealtimeReporterEventConsumer consumer ) {
86- // TODO: table(l_reporter.get_lines()) instead of table(ut_output_clob_table_buffer(?).get_lines())
87- var sql = ' ' '
88- SELECT t.item_type, t.text
89- FROM table(ut_output_clob_table_buffer(?).get_lines()) t
88+ val plsql = ' ' '
89+ DECLARE
90+ l_reporter ut_realtime_reporter := ut_realtime_reporter();
91+ BEGIN
92+ l_reporter.set_reporter_id(?);
93+ OPEN ? FOR
94+ SELECT t.item_type, t.text
95+ FROM table(l_reporter.get_lines()) t;
96+ END;
9097 ' ' '
91- jdbcTemplate. query(sql, new ResultSetExtractor<Void > () {
92- override extractData(ResultSet rs) throws SQLException , DataAccessException {
98+ jdbcTemplate. execute(plsql, new CallableStatementCallback<Void > () {
99+ override doInCallableStatement(CallableStatement cs) throws SQLException , DataAccessException {
100+ cs. setString(1 , reporterId)
101+ cs. registerOutParameter(2 , OracleTypes . CURSOR )
102+ cs. execute
103+ val rs = cs. getObject(2 ) as ResultSet
93104 while (rs. next) {
94105 val itemType = rs. getString(" item_type" )
95106 val textClob = rs. getClob(" text" )
@@ -99,9 +110,10 @@ class RealtimeReporterDao {
99110 consumer. process(event)
100111 }
101112 }
113+ rs. close
102114 return null
103115 }
104- }, #[reporterId]);
116+ })
105117 }
106118
107119 private def RealtimeReporterEvent convert (String itemType , String text ) {
0 commit comments