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