我已经在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数据时,将获得输出。但是通过功能,它不能正常工作。我将不胜感激。
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
)。
-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的代码更新您的问题,>