当cl
带有方法的 Java 类mth
驻留在包pck
中时,我应该在EXTERNAL NAME
子句中放入什么CREATE PROCEDURE
?
我试过了
CREATE PROCEDURE mth (arg1 INTEGER) LANGUAGE JAVA EXTERNAL NAME 'myjar:pck/cl.mth'
CREATE PROCEDURE mth (arg1 INTEGER) LANGUAGE JAVA EXTERNAL NAME 'myjar:pck.cl.mth'
CREATE PROCEDURE mth (arg1 INTEGER) LANGUAGE JAVA EXTERNAL NAME 'myjar:cl.mth'
但无论哪种方式,我得到The user defined function or procedure "mth" was unable to map to a single Java method.. SQLCODE=-20204, SQLSTATE=46008, DRIVER=3.68.61
在 Java 端,该方法声明如下:
public void send_mail( // with or w/o static, with or w/o synchronized
final String P_TO,
final String P_CC,
final String P_BCC,
final String P_FROM,
final String P_SUBJECT,
final String P_TEXT_MSG,
final String P_HTML_MSG,
final String P_ATTACH_NAME,
final String P_ATTACH_MIME,
final byte[] P_ATTACH_BLOB,
final String P_SMTP_HOST,
final int P_SMTP_PORT,
final String P_USER_NAME,
final String P_PASSWORD
在 DB2 端,正在尝试按如下方式创建该过程:
CREATE PROCEDURE send_mail(
IN P_TO VARCHAR(4096),
IN P_CC VARCHAR(4096) DEFAULT NULL,
IN P_BCC VARCHAR(4096) DEFAULT NULL,
IN P_FROM VARCHAR(4096),
IN P_SUBJECT VARCHAR(32672),
IN P_TEXT_MSG VARCHAR(32672) DEFAULT NULL,
IN P_HTML_MSG VARCHAR(32672) DEFAULT NULL,
IN P_ATTACH_NAME VARCHAR(255) DEFAULT NULL,
IN P_ATTACH_MIME VARCHAR(100) DEFAULT NULL,
IN P_ATTACH_BLOB BLOB DEFAULT NULL,
IN P_SMTP_HOST VARCHAR(255),
IN P_SMTP_PORT INTEGER DEFAULT 25,
IN P_USER_NAME VARCHAR(255) DEFAULT NULL,
IN P_PASSWORD VARCHAR(32672) DEFAULT NULL
)
LANGUAGE java
PARAMETER STYLE java
FENCED THREADSAFE
EXTERNAL NAME 'javadb2:db2.smtp.send_mail' -- with or w/o db2
每次sqlj.db2_install_jar
它出现在function\username
DB2 文件夹层次结构中的文件夹下时,我都检查并再次检查。
正确的格式是
<JAR name>:<class name>.<method name>
,<class name>
是完全限定的,即包含包名。由于您仍然收到此错误,因此您的方法签名可能不符合您使用的约定。不指定PARAMETER STYLE
选项,表示DB2GENERAL
默认使用,不推荐。使用PARAMETER STYLE JAVA
并确保方法签名正确(public static void mth(int arg1)
在您设计的示例中)。另请注意