EXTERNAL NAME 參數的格式是什麼?
當
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)
在您設計的範例中)。另請注意
要更新 JAR 文件中內置的 Java™ 常式,您必鬚髮出一個
CALL SQLJ.REFRESH_CLASSES()
語句來強制數據庫管理器裝入新類。如果您在更新 Java 常式類後不發出該CALL SQLJ.REFRESH_CLASSES()
語句,那麼數據庫管理器將繼續使用這些類的先前版本。當 aCOMMIT
或ROLLBACK
發生時,數據庫管理器刷新類。(來源)