在网上看到,只要把java class 编译好之后放到lib/function下面即可。若是jar,则放到jar下面对应的schema下即可。
不用重新启动,
(Jdb是类名,jdb是方法名,参数是String input)。编译后查看如下:
CREATE PROCEDURE EFAN.JAVAPROC ( IN INPUT VARCHAR(100) )
SPECIFIC SQL080313122559100
LANGUAGE JAVA
EXTERNAL NAME 'jdb(Ljava/lang/String; )V'
PARAMETER STYLE JAVA
NOT DETERMINISTIC
FENCED
THREADSAFE
EXTERNAL ACTION
MODIFIES SQL DATA
CALLED ON NULL INPUT
NO DBINFO
INHERIT SPECIAL REGISTERS;
编译可以通过,但是执行时报错:
ERROR [42724] [IBM][DB2/NT] SQL4304N Java stored procedure or user-defined function "EFAN.JDB", specific name "SQL080313122559100" could not load Java class "Jdb", reason code "1". SQLSTATE=42724
这里的classpath指的是在系统环境变量里建的吗?
--------------------
解释:
不能装入由 CREATE PROCEDURE 或 CREATE FUNCTION 语句的
EXTERNAL NAME 子句给定的 Java 类。原因码为:
1 在 CLASSPATH 上找不到该类。
2 该类未实现必需的接口 ("COM.ibm.db2.app.StoredProc"
或 "COM.ibm.db2.app.UDF") 或缺少 Java "public"
存取权标志。
3 缺省构造函数失败或不可用。
4 未能为 "jdbc:default:connection" 装入驱动程序。
5 未能建立缺省上下文。
用户响应:
确保编译的“.class”文件安装在 CLASSPATH
中,例如在“sqllib/function”下。确保它实现必需的
Java 接口且是“public”。
sqlcode : -4304
sqlstate : 42724
------解决方案--------------------------------------------------------
来接分了, 是classpath 的问题吗?
------解决方案--------------------------------------------------------
路过下,存储过程本来就没有学好,现在很久没有用都忘玩了,想楼主学习、