【发布时间】:2011-03-21 19:14:54
【问题描述】:
存储过程定义为:
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 Navigator,我授予了读取和执行权限。 Java 类文件在 /QIBM/UserData/OS400/SQLLib/Function/ETL.CLASS 上的 de AS/400 内部复制和编译。
当我尝试使用call MYSCHEMA.LOAD_ETL() 执行存储过程时,出现错误:
[SQL4303] Java 存储过程或用户自定义函数名称,无法从外部名称字符串中识别特定名称 spec-name。
说明:声明此存储过程或用户定义函数的 CREATE PROCEDURE 或 CREATE FUNCTION 语句具有格式错误的 EXTERNAL NAME 子句。外部名称的格式必须如下:“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 没有权限对对象名进行操作操作。
使用 System i Navigator,我授予了 /QIBM/UserData/OS400/SQLLib/Function/ETL.CLASS 上 Java 类文件的读取和执行权限。
我明白了
CPFA0A9(找不到对象):/QIBM/UserData/OS400/SQLLib/Function/com.mycompany.ETL.class
所以我把它打包成一个jar文件并复制到/QIBM/UserData/OS400/SQLLib/Function/etl.jar。
我又重新创建了一次存储过程,但它仍然不起作用。
然后我将存储过程重新创建为:
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 ;
再一次,还是不行。
提前感谢您的帮助。
【问题讨论】:
标签: java stored-procedures db2 ibm-midrange