0

我在 Database1 中创建了一个 DB2 UDF,它通过联合设置引用 Database2 中的一个表 (tablename2)。该函数在 Database1 中得到正确编译。但是,当通过运行以下选择查询运行 UDF 时,会获得错误消息

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

错误信息-

隐式系统操作类型“5”期间发生错误。为错误返回的信息包括 SQLCODE“-204”、SQLSTATE“42704”和消息标记“schemaname.tablename2”.. SQLCODE=-727、SQLSTATE=56098、DRIVER=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:-执行选择查询以通过Federation从Database1获取tablename2数据时获得输出。但是通过功能,它无法正常工作。我将不胜感激这方面的任何帮助。

4

2 回答 2

1

SQL 函数的限制

以下限制适用于 SQL 函数:

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

请尝试使用inlined函数 ( P1: BEGIN ATOMIC)。

于 2019-12-02T14:29:20.320 回答
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代码更新您的问题

于 2019-11-29T10:02:19.287 回答