Java Z/OS上DB28.1.5中的应用程序ID
我一直在研究如何在Z/OSremote上从DB28.1.5获取应用程序Id。我找到了这个链接: 在这个链接中,据说在8.2之前的db2中没有内置functionapplication_id来获取应用程序id。因此,我尝试了这个链接中提到的解决方案。但是,当在上一个链接中尝试使用SQL函数注册Java方法时,db2会这样警告我: DB21034E由于该命令不是SQL语句,因此将其作为SQL语句处理 有效的命令行处理器命令。在SQL处理过程中,它返回: SQL0104N在下面发现意外的标记FENCED。预期 令牌可以包括:确定性、变量。SQLSTATE=42601 我尝试的功能是:Java Z/OS上DB28.1.5中的应用程序ID,java,sql,db2,Java,Sql,Db2,我一直在研究如何在Z/OSremote上从DB28.1.5获取应用程序Id。我找到了这个链接: 在这个链接中,据说在8.2之前的db2中没有内置functionapplication_id来获取应用程序id。因此,我尝试了这个链接中提到的解决方案。但是,当在上一个链接中尝试使用SQL函数注册Java方法时,db2会这样警告我: DB21034E由于该命令不是SQL语句,因此将其作为SQL语句处理 有效的命令行处理器命令。在SQL处理过程中,它返回: SQL0104N在下面发现意外的标记FENC
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.");
}
}
}
}
请帮帮我
感谢您的提醒SQL104N表示您的sql语句不正确 对于调用外部标量函数,我不确定db2luw情况下的z/OS,您可以使用SQLJ.INSTALL_JAR,如下所示
CALL SQLJ.INSTALL_JAR('file:///C:/whitegladiolus.jar','MYJARX')
另请参见根据IBM的DB2forz/OSVersion8文档,不支持NotFenced。如文档中所述,DB2UniversalDatabaseVersion8支持NotFenced。尝试将“未防护”更改为“防护”