尝试执行包含通过联合连接的表名的 DB2 UDF 时出错



我在 Database1 中创建了一个 DB2 UDF,它通过联合设置引用了 Database2 中的一个表(tablename2(。该函数在数据库 1 中得到正确遵守。但是,当通过运行以下选择查询来运行 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:- 当执行选择查询以通过联合从数据库 1 获取表名 2 数据时,将获得输出。但是通过功能,它不能正常工作。我将不胜感激对此的任何帮助。

对 SQL 函数的限制:

以下限制适用于 SQL 函数:

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

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

-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 的代码更新您的问题

最新更新