当从客户端调用DB2外部存储过程时,由于CPF9810而失败

jckbn6z7  于 2022-11-07  发布在  DB2
关注(0)|答案(5)|浏览(147)

在绿色屏会话中,当我的库列表被设置为QGPL、QTEMP、VENDRLIB 1、VENDRLIB 2、VENDRLIB 3时,对程序MYLIB/TESTPRG进行缩放是有效的。我可以在绿屏命令行上执行call MYLIB/TESTPRG
我希望能够从我的Windows客户端运行此命令。我创建了一个外部存储过程MYLIB/TESTPROC,外部名称为MYLIB/TESTPRG,正如我在多篇文章中看到的那样。我最初的问题是,我可以在绿色屏幕会话中使用上面的库列表在STRSQL中成功地执行此过程,但那是假的。它不起作用。它只是说“触发程序或外部例程检测到错误。”对不起,错误的信息。
当从客户端调用MYLIB/TESTPROC时(CALL MYLIB/TESTPROC),CPF 9810无法使用(未找到程序库&1)。我通过i导航器-〉运行SQL脚本连接到数据库。在连接-〉JDBC设置中,我的默认SQL模式为'使用服务器作业的程序库列表',并设置模式列表为QGPL,QTEMP,VENDRLIB 1,VENDRLIB 2,然后,我执行了CALL MYLIB/TESTPROC,并得到了如上所述的消息。
什么工作是当我运行的程序,iidoE.CALL MYLIB/TESTPRG在一个绿色屏幕命令行。
TESTPRG是一个不带参数的C程序。存储过程的定义如下:

CREATE PROCEDURE MYLIB/TESTPROC
    LANGUAGE C 
    SPECIFIC MYLIB/TESTPROC 
    NOT DETERMINISTIC 
    NO SQL 
    CALLED ON NULL INPUT 
    EXTERNAL NAME 'MYLIB/TESTPRG' 
    PARAMETER STYLE GENERAL ;
chhkpiq4

chhkpiq41#

CPF9810 - Library &1 not found表示有人正在尝试访问库&1(不管是什么,您没有告诉我们),并且键入的库不在系统中的任何地方。&1不是库的名称,它是一个替代变量,将在作业日志中显示存储库名称。请查看作业日志中的真实的存储库拼写。检查您的拼写。请检查连接以确保正确指定了所有库。该消息将告诉您导致问题的确切库。
如果程序在正确设置了库列表的情况下确实能在绿色屏中工作,那么我认为问题出在你的连接中,它试图设置一个库列表。你不能将一个不存在的库添加到库列表中。这就是为什么它能在绿屏中工作,你的库必须正确地输入在那里,否则它就不会在库列表中。你会得到一个类似的错误(相同的文本,不同的错误代码),如果您尝试将有拼写错误的库添加到绿色屏中的库列表。
找出消息的完整文本(查看作业日志),您将看到引发错误的内容以及库是什么。提示,引发错误的不太可能是SQL,因为这些错误看起来都像SQL####或SQ#####。更有可能是发送CPF消息的IBM服务器调用了CL命令或其处理程序。

zlhcx6iw

zlhcx6iw2#

正如您所发现的,您可以根据IBM的以下文档直接调用简单的程序,而无需定义外部SQL过程:https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_73/db2/rbafzcallsta.htm
我认为为简单程序创建自己的外部过程定义的建议主要是为了减少歧义。如果程序和过程的名称恰好匹配,则需要了解规则列表,以确定调用的是哪一个。
此外,外部函数的规则与外部存储过程不同,因此也会混淆。

daolsyd0

daolsyd03#

根据我的评论,我通常在调用命令中使用库进行过程调用。
在使用CALL PGM(MYLIB/TESTPROC)的终端会话中。或在使用CALL MYLIB. TESTPROC的SQL会话中。
这可以防止有人无意中将您的过程放入个人库或类似的库中。我通常不在SQL客户端上指定会话库列表,而是接受系统库列表。

eoxn13cs

eoxn13cs4#

我曾答应接受道格拉斯Korinke的评论作为答案。然而,我做了很多实验,我不再确定我知道什么以及我是什么时候知道的。我的问题与参数传递到C程序有关。如果我能用一个简单的例子重现它,我会问另一个问题。

gudnpqoy

gudnpqoy5#

在Java程序中,可以使用以下方法设置库:ds.setLibraries(“库列表”);
示例:

ds.setServerName("server1");
ds.setPortNumber(1780);
ds.setDatabaseName("DBTEST");
ds.setLibraries("*LIBL,DAT452BS,DAT452BP");

相关问题