如何解决SQuirrel 调用存储过程
我正在尝试从 Squirrel 调用 DB2 存储过程。 我可以从 DB2 命令行成功调用存储过程 处理器。
CALL PIPPOOWN.PIPPO
('04','prov','0001','provprov')
我将 ;retrieveMessagesFromServerOnGetMessage=true;
附加到数据库的连接字符串。
jdbc:db2://xx.xx.x.xx:50001/DB2XYX:retrieveMessagesFromServerOnGetMessage=true;
但是当我在 Squirrel 中尝试此操作时,我收到此错误消息。我在跑步
Error: [jcc][10413][10940][4.19.49]
Analisi della sostituzione letterale non riuscita per la chiamata della procedura a DB2 per z/OS.
Testo sql non riuscito CALL
SP_XXXXX('XX','prova').
ERRORCODE=-4463,sqlSTATE=42601
sqlState: 42601
ErrorCode: -4463
2021-02-02 12:01:03,409 [Thread-6] ERROR net.sourceforge.squirrel_sql.fw.util.DefaultExceptionFormatter - Exception occurred while formatting: null
java.lang.NullPointerException
at net.sourceforge.squirrel_sql.plugins.db2.DB2JCCExceptionFormatter.format(DB2JCCExceptionFormatter.java:93)
at net.sourceforge.squirrel_sql.fw.util.DefaultExceptionFormatter.format(DefaultExceptionFormatter.java:68)
at net.sourceforge.squirrel_sql.client.session.Session.formatException(Session.java:1195)
at net.sourceforge.squirrel_sql.client.session.mainpanel.sqlExecutionHandler.sqlExecutionException(sqlExecutionHandler.java:458)
at net.sourceforge.squirrel_sql.client.session.sqlExecuterTask.handleError(sqlExecuterTask.java:621)
at net.sourceforge.squirrel_sql.client.session.sqlExecuterTask.runDirect(sqlExecuterTask.java:264)
at net.sourceforge.squirrel_sql.client.session.sqlExecuterTask.run(sqlExecuterTask.java:137)
at net.sourceforge.squirrel_sql.fw.util.TaskExecuter.run(TaskExecuter.java:82)
at java.lang.Thread.run(UnkNown Source)
我更新了 jdbc 驱动程序,但我没有修复。
DB2 版本:11.01
如果我使用 IBM DATA STUdio 或我使用 DB2 AIX,它就可以工作。
编辑 03/02/2021
我下载了“IBM Data Server Driver for JDBC and sqlJ (JCC Driver)”Version 11.5.4,然后我将其配置为使用 db2jcc4.jar 现在它给出了以下错误:
NO AUTHORIZED PROCEDURE NAMED PIPPOOWN.PIPPO HAVING COMPATIBLE ARGUMENTS WAS FOUND.
sqlCODE=-440,sqlSTATE=42884,DRIVER=4.26.14 sql Code: -440,sql State: 42884
但是如果我使用 IBM DATA STUdio 和相同的用户和语句,我不会出错
存储过程“PIPPO”- GRANT
GRANT EXECUTE ON PROCEDURE "PIPPOOWN"."PIPPO" TO "ALL";
GRANT EXECUTE ON PROCEDURE "PIPPOOWN"."PIPPO" TO "PUBLICB";
GRANT EXECUTE ON PROCEDURE "PIPPOOWN"."PIPPO" TO "PIPPOOWN" WITH GRANT OPTION;
GRANT EXECUTE ON PROCEDURE "PIPPOOWN"."PIPPO" TO "USERWEB";
GRANT EXECUTE ON PROCEDURE "PIPPOOWN"."PIPPO" TO PUBLIC;
存储过程“PIPPO” - 分发选项(使用数据洞察)
CURRENT_PATH BY SQUIRREL
SELECT CURRENT_PATH FROM SYSIBM.SYSDUMMY1
RESULTS
-----------------------------------------------
"SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","PIPPOOWN"
最后,我在 Squirrel 日志中找不到任何错误。
有什么想法吗?
编辑 04/02/2021
我在 Squirrel 上执行 call 语句,启用 JDBC 日志,发现这个错误:
[jcc][Time:2021-02-04-10:16:23.549][Thread:Thread-4][Statement@f7f204]**execute (CALL OWNER1.SP_ABC('xx')) called**
[jcc][Time:2021-02-04-10:16:23.549][Thread:Thread-4][Statement@f7f204]stmt_bidiTransform (CALL OWNER1.SP_ABC('xx')) called
[jcc][Time:2021-02-04-10:16:23.549][Thread:Thread-4][Statement@f7f204]**stmt_bidiTransform not enabled (CALL OWNER1.SP_ABC('xx')) called**
[jcc][t4][time:2021-02-04-10:16:23.549][Thread:Thread-4][tracepoint:1][Request.flush]
[jcc][t4] SEND BUFFER: EXCsqlSTT (ASCII) (EBCDIC)
...
.....
**com.ibm.db2.jcc.am.sqlSyntaxErrorException
** at com.ibm.db2.jcc.am.b7.a(b7.java:810)
at com.ibm.db2.jcc.am.b7.a(b7.java:66)
at com.ibm.db2.jcc.am.b7.a(b7.java:140)
at com.ibm.db2.jcc.am.k4.b(k4.java:2471)
at com.ibm.db2.jcc.am.k4.c(k4.java:2452)
at com.ibm.db2.jcc.t4.ab.n(ab.java:914)
at com.ibm.db2.jcc.t4.ab.f(ab.java:156)
at com.ibm.db2.jcc.t4.p.e(p.java:81)
at com.ibm.db2.jcc.t4.av.k(av.java:175)
at com.ibm.db2.jcc.am.k4.ao(k4.java:2413)
at com.ibm.db2.jcc.am.k4.a(k4.java:3383)
at com.ibm.db2.jcc.am.k4.e(k4.java:1131)
at com.ibm.db2.jcc.am.k4.execute(k4.java:1110)
at net.sourceforge.squirrel_sql.client.session.StatementWrapper.execute(StatementWrapper.java:168)
at net.sourceforge.squirrel_sql.client.session.sqlExecuterTask.processQuery(sqlExecuterTask.java:361)
at net.sourceforge.squirrel_sql.client.session.sqlExecuterTask.runDirect(sqlExecuterTask.java:214)
at net.sourceforge.squirrel_sql.client.session.sqlExecuterTask.run(sqlExecuterTask.java:137)
at net.sourceforge.squirrel_sql.fw.util.TaskExecuter.run(TaskExecuter.java:82)
at java.lang.Thread.run(UnkNown Source)
为了比较不同的日志,我还激活了 IBM DATA STUdio JDBC 日志(其中 CALL 语句正常工作),我注意到在执行 execute() 之前完成了 prepareCall()。
IBM 数据工作室
[jcc][Time:2021-02-03-20:52:10.381][Thread:Worker-19][Connection@97f8a03c]prepareCall (CALL OWNER1.SP_ABC('XX')) called
[jcc] [time:2021-02-03-20:52:10.383][Thread:Worker-19][tracepoint:4000]LiteralInfo entry,sql:CALL OWNER1.SP_ABC('XX')
[jcc] [time:2021-02-03-20:52:10.387][Thread:Worker-19][tracepoint:4005]LiteralInfo.return,Originalsql:CALL OWNER1.SP_ABC('XX'),modifiedsql:CALL OWNER1.SP_ABC(?),literalCount=1,parmCount=1[CHaraCTER(XX)]
[jcc][Time:2021-02-03-20:52:10.390][Thread:Worker-19][Connection@97f8a03c]prepareCall () returned MappedCallableStatement@691cf97[com.ibm.db2.jcc.am.CallableStatement@88958c83]
[jcc][Time:2021-02-03-20:52:10.390][Thread:Worker-19][Connection@97f8a03c]prepareCall () returned MappedCallableStatement@691cf97[com.ibm.db2.jcc.am.CallableStatement@88958c83]
[jcc][Thread:Worker-19][SystemMonitor:stop] core: 9.5471ms | network: 0.0ms | server: 0.0ms
[jcc][Time:2021-02-03-20:52:10.390][Thread:Worker-19][CallableStatement@88958c83]setMaxRows (0) called
[jcc][Time:2021-02-03-20:52:10.390][Thread:Worker-19][CallableStatement@88958c83]setString (1,XX) called
[jcc][Thread:Worker-19][SystemMonitor:start]
[jcc][Time:2021-02-03-20:52:10.390][Thread:Worker-19][CallableStatement@88958c83]execute () called
[jcc][Time:2021-02-03-20:52:10.390][Thread:Worker-19][CallableStatement@88958c83]stmt_bidiTransform (CALL OWNER1.SP_ABC(?)) called
[jcc][Time:2021-02-03-20:52:10.390][Thread:Worker-19][CallableStatement@88958c83]stmt_bidiTransform not enabled (CALL OWNER1.SP_ABC(?)) called
[jcc][t4][time:2021-02-03-20:52:10.390][Thread:Worker-19][tracepoint:1][Request.flush]
I looked in the [IBM documentation][4] and it seems that in order to call SP with parameters in the Z/OS environment,it is necessary to perform a PreparedStatement.
此时我认为是松鼠BUG...
解决方法
我试图打开一个 BUG:squirrel-sql:bugs#1457 在 DB2 z/os 上使用输入参数调用存储过程
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。