Z / OS上db2 8.1.5的应用程序ID

时间:2011-10-10 14:10:20

标签: java sql db2

我一直在搜索如何从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

2 个答案:

答案 0 :(得分:0)

SQL104N表示您的sql语句不正确。

对于db2luw,对于调用外部标量函数(我不确定z / OS),可以使用SQLJ.INSTALL_JAR,如下所示

CALL SQLJ.INSTALL_JAR('file:///C:/whitegladiolus.jar','MYJARX')

另见http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/r0006425.htm

答案 1 :(得分:0)

根据IBM在CREATE FUNCTION上的DB2 for z / OS V8文档,不支持NOT FENCED。 DB2 Universal Database V8支持NOT FENCED,如CREATE FUNCTION文档中所述。尝试将NOT FENCED更改为FENCED