Oracle
संग्रहीत प्रक्रिया (कर्सर समेत) से आउटपुट पैरामीटर प्राप्त करने और अपवाद प्राप्त करने के लिए Mule ESB
में Groovy
स्क्रिप्ट का उपयोग कर रहा हूं।ग्रोवी का उपयोग कर ओरेकल से कर्सर कैसे प्राप्त करें?
मिनिमल उदाहरण:
import groovy.sql.Sql
import oracle.jdbc.pool.OracleDataSource
import oracle.jdbc.driver.OracleTypes
def ds = new OracleDataSource()
// setting data source parameters here
def sql = new Sql(ds)
def data = []
sql.call("""declare
result_table sys_refcursor;
begin
open result_table for select 1 as a from dual;
insert into CURSOR_TEST (ID) values (1);
commit;
${Sql.resultSet OracleTypes.CURSOR} := result_table;
insert into CURSOR_TEST (ID) values (2);
commit;
end;
"""
){ table ->
throw new RuntimeException("Never getting this exception.")
table.eachRow {
data << it.toRowResult()
}
}
sql.close()
return data
त्रुटि:
Message : java.sql.SQLException: Closed Statement (javax.script.ScriptException) Code : MULE_ERROR--2 -------------------------------------------------------------------------------- Exception stack is: 1. Closed Statement(SQL Code: 17009, SQL State: + 99999) (java.sql.SQLException) oracle.jdbc.driver.SQLStateMapping:70 (null) 2. java.sql.SQLException: Closed Statement (javax.script.ScriptException) org.codehaus.groovy.jsr223.GroovyScriptEngineImpl:323 (http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/script/ScriptException.html) 3. java.sql.SQLException: Closed Statement (javax.script.ScriptException)
(org.mule.api.transformer.TransformerException) org.mule.module.scripting.transformer.ScriptTransformer:39 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerException.html) -------------------------------------------------------------------------------- Root Exception stack trace: java.sql.SQLException: Closed Statement at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70) at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199) + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything) ********************************************************************************
Select
CURSOR_TEST
रिटर्न 1
और 2
से।
ओरेकल सर्वर संस्करण: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
।
धुंध संस्करण: 3.5.0
।
मैं ओरेकल क्लाइंट संस्करण 11.1.0.7.0
से jdbc\lib\ojdbc6.jar
का उपयोग कर रहा हूं।
मैं क्या गलत कर रहा हूं?
आप खच्चर के बाहर एक ग्रूवी लिपि में है कि कोड को चलाने के लिए कोशिश की? हटाए गए टिप्पणी में –
@senia, आपने कहा है कि आपने इसके बजाय जावा कार्यान्वयन का उपयोग करके इस समस्या को हल किया है। क्या आप इस जावा कोड को अपने प्रश्न के उत्तर के रूप में पोस्ट कर सकते हैं और इसे स्वीकार कर सकते हैं? इससे हमें यह पता लगाने का मौका मिलेगा कि इस ग्रोवी कार्यान्वयन में क्या गलत था। –
@ डेविडडॉसॉट: यहां [मेरा वर्कअराउंड उदाहरण] है (http://pastebin.com/XWAzXCU5)। मुझे नहीं लगता कि यह मेरे प्रश्न का एक अच्छा जवाब है, थोड़ी गड़बड़ी सहायता के साथ बस एक अच्छा पुराना जावा। – senia