我一直在搜索如何从Z / OS(远程)上的db2 8.1.5获取应用程序ID。我找到了这个链接: http://www.ibm.com/developerworks/data/library/techarticle/0302stolze/0302stolze.html
在这个链接中,据说在8.2之前的db2中没有内置函数(application_id)来获取应用程序ID。所以,我试过这个链接说的解决方案。但是当在前一个链接中尝试SQL函数来注册Java方法时,db2会以这种方式警告我:
DB21034E该命令作为SQL语句处理,因为它不是 有效的命令行处理器命令。在SQL处理期间,它返回: SQL0104N在“”之后发现了意外的令牌“FENCED”。预期 代币可能包括:“确定性,变异性”。 SQLSTATE = 42601
我试过的功能:
CREATE FUNCTION application_id()
RETURNS VARCHAR(128)
SPECIFIC applId EXTERNAL NAME 'appl_id.getApplicationId'
NOT FENCED LANGUAGE JAVA PARAMETER STYLE DB2GENERAL
DETERMINISTIC
NO SQL NO EXTERNAL ACTION ALLOW PARALLEL DBINFO
Java方法:
import java.sql.*;
import COM.ibm.db2.app.*;
public class appl_id extends UDF
{
public void getApplicationId(String result) throws Exception
{
try {
// set the output parameter based on DBINFO
set(1, getDBapplid());
}
catch (Exception e) {
setSQLstate("38XXX");
if (e.getMessage().length() > 0) {
setSQLmessage("Exception '" + e.getMessage() +
"' encountered.");
}
else {
setSQLmessage("Exception '" + e.toString() +
"' encountered.");
}
}
}
}
请帮帮我
感谢advence
答案 0 :(得分:0)
SQL104N表示您的sql语句不正确。
对于db2luw,对于调用外部标量函数(我不确定z / OS),可以使用SQLJ.INSTALL_JAR,如下所示
CALL SQLJ.INSTALL_JAR('file:///C:/whitegladiolus.jar','MYJARX')
答案 1 :(得分:0)
根据IBM在CREATE FUNCTION
上的DB2 for z / OS V8文档,不支持NOT FENCED
。 DB2 Universal Database V8支持NOT FENCED
,如CREATE FUNCTION
文档中所述。尝试将NOT FENCED
更改为FENCED
。