尝试执行包含通过联合身份验证连接的表名的DB2 UDF时发生错误

问题描述 投票:0回答:2

我已经在Database1中创建了一个DB2 UDF,它通过联合身份验证设置引用了Database2中的一个表(表名2)。该函数已在Database1中正确编译。但是,当通过运行以下选择查询来运行UDF时,将获得错误消息]

从sysibm.sysdummy1中选择Database1schema.UDFName();

错误消息-

隐式系统操作类型为“ 5”时发生错误。信息返回的错误包括SQLCODE“ -204”,SQLSTATE“ 42704”和消息令牌“ schemaname.tablename2”。SQLCODE= -727,SQLSTATE = 56098,驾驶员= 3.64.114

-UDF代码

CREATE or replace function Database1schema.UDFName()
returns varchar(1000)

LANGUAGE SQL 


P1: BEGIN 


    DECLARE v_outmessage varchar(1000) default '0';


        BEGIN

            select a.status into v_outmessage
            from database2.database2schema.tablename2 a,database1schema.tablename1 b
            where a.appno = b.app_no;

        END;


    return v_outmessage;
END P1


PS:-执行选择查询以通过联合身份验证从Database1提取tablename2数据时,将获得输出。但是通过功能,它不能正常工作。我将不胜感激。

db2 user-defined-functions db2-luw federation federated
2个回答
1
投票

Restrictions on SQL functions

以下限制适用于SQL函数:

  • SQL表函数不能包含已编译的复合语句。
  • 定义为READS SQL的已编译SQL标量函数可以在分区数据库环境中调用,但前提是:一定要在协调代理中执行。
  • 定义为CONTAINS SQL并且在分区数据库环境中调用的已编译SQL标量函数无法准备SQL语句,无法执行CALL语句,并且不能使用任何SQL编译器转换为完整SQL语句的构造处理之前。
  • 根据定义,SQL函数不能包含用WITH RETURN子句定义的游标。
  • 已编译的SQL函数不支持以下数据类型:结构化数据类型,LONG VARCHAR数据类型和LONGVARGRAPHIC数据类型。版本不支持XML数据类型10.1。对XML数据类型的支持始于版本10.1 Fix Pack 1。
  • 在此版本中,不支持在已编译的SQL函数中使用DECLARE TYPE语句。
  • 已编译的SQL函数(包括PL / SQL函数)不得包含对联合对象的引用。
  • 已修改SQL数据的已编译SQL函数(包括PL / SQL函数)只能用作页面右侧的唯一元素。复合SQL中的赋值语句(已编译)声明。
  • [如果表包含生成的列表达式,其中用户定义的函数是已编译的复合SQL,则您不能使用LOAD实用程序以将数据插入表中。

改为尝试inlined功能(P1: BEGIN ATOMIC)。


0
投票

-204是

SQL0204N  "<name>" is an undefined name.

Explanation:

This error is caused by one of the following:

*  The object identified by "<name>" is not defined in the
   database.

而-727原因码5为

SQL0727N  An error occurred during implicit system action type
      "<action-type>". Information returned for the error includes
      SQLCODE "<sqlcode>", SQLSTATE "<sqlstate>" and message tokens
      "<token-list>".


5

         incremental bind of a static SQL statement, not bound during
         package bind time

带注释

Federated system users: You may have received this message because you
dynamically prepared an SQL statement in a pass-through session and then
tried to execute the statement after the session was closed.

Federated system users: If the statement that failed was dynamically
prepared in a pass-through session, open another pass-through session,
write and prepare the statement again, and execute it while the session
is still open.

如果上述方法无济于事,请使用您的UDFName() UDF的代码更新您的问题,>

© www.soinside.com 2019 - 2024. All rights reserved.