存儲過程定義的工作是:Java存儲過程不會對DB2/400 V6R1工作 - 它曾經在V5R4
CREATE PROCEDURE MYSCHEMA.LOAD_ETL ()
LANGUAGE JAVA
SPECIFIC MYSCHEMA.LOAD_ETL
NOT DETERMINISTIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
EXTERNAL NAME 'ETL!loadETL'
PARAMETER STYLE JAVA ;
用的System i導航我授予讀取和執行權限。 Java類文件被複制並編譯德AS/400的內部上/QIBM/UserData/OS400/SQLLib/Function/ETL.CLASS。
當我試着使用call MYSCHEMA.LOAD_ETL()
執行存儲過程,我得到的錯誤:
[SQL4303] Java stored procedure or user-defined function name, specific name spec-name could not be identified from external name string.
Explanation: The CREATE PROCEDURE or CREATE FUNCTION statement that declared this stored procedure or user-defined function had a badly formatted EXTERNAL NAME clause. The external name must be formatted as follows: "package.subpackage.class!method".
所以,我重構了類com.mycompany.ETL
。並複製和重新編譯它的AS/400 /QIBM/UserData/OS400/SQLLib/Function/com/mycompany/ETL.class內。
我重新創建存儲過程:
CREATE PROCEDURE MYSCHEMA.LOAD_ETL ()
LANGUAGE JAVA
SPECIFIC MYSCHEMA.LOAD_ETL
NOT DETERMINISTIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
EXTERNAL NAME 'com.mycompany.ETL!loadETL'
PARAMETER STYLE JAVA ;
但是它仍然無法正常工作。
現在的錯誤是:
SQL0551. Authorization-ID does not have the privilege to perform operation operation on object name.
用的System i導航我授予讀取和執行權限的Java類文件上/QIBM/UserData/OS400/SQLLib/Function/ETL.CLASS。
我得到
CPFA0A9 (Object not found): /QIBM/UserData/OS400/SQLLib/Function/com.mycompany.ETL.class
所以我打包成一個jar文件,並拷貝到/QIBM/UserData/OS400/SQLLib/Function/etl.jar。
我重新創建存儲過程的一個更多的時間,但它仍然無法正常工作。
然後我重新-again-存儲過程爲:再次
CREATE PROCEDURE MYSCHEMA.LOAD_ETL ()
LANGUAGE JAVA
SPECIFIC MYSCHEMA.LOAD_ETL
NOT DETERMINISTIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
EXTERNAL NAME 'com/mycompany/ETL!loadETL'
PARAMETER STYLE JAVA ;
,它仍然無法正常工作。
在此先感謝您的幫助。