UDTF生成未打开的游标SQL_TABLE_CURSOR 背景:尝试的解决方案:编辑:

问题描述

背景:

我们有两个IBMi DB2数据库环境,我将它们称为DEV和PRODUCTION。在大多数情况下,尽管没有维护开发数据也不具有权威性,但我们还是有重复的表。

在生产中,我们有一个从第三方来源更新的表,我不想花时间在开发中进行维护。但是我确实需要开发中的最新信息。

尝试的解决方案:

所以我有个聪明的主意

  1. 在dev中制作一个UDTF(用户定义表函数)以跨越数据库(使用三部分名称),并在Development函数中返回Production数据。
  2. 使用UDTF作为源在dev中使用与生产表同名的视图。

当我select * from myschema.myview开发时,一切都是笨拙的。我很快得到结果。

但是,如果我向其中添加一个简单的where子句,select * from myschema.myview where id='1234',它将挂起,然后以

响应

[代码:-501,sql状态:24501] [sql0501]游标sql_TABLE_CURSOR无法打开。


进一步测试后,我发现问题出在UDTF中:

select * from table ( myschema.myfunction() ) where id = '1234'

这会产生相同的“ sql_TABLE_CURSOR无法打开”错误

我要尝试做超出正常使用范围的事情吗?

编辑:

添加别名可以使查询正常运行,但是花了45秒钟...

select t.* from table ( myschema.myfunction() ) t where t.id = '1234'

更接近,但仍然无法正常工作。


函数的构建方式如下:

CREATE FUNCTION myschema.myfunction ( ) 
  RETURNS TABLE ( 
  "ID" VARCHAR(255),ACCOUNTID VARCHAR(255),CREATEDBYID VARCHAR(255),CREATEDBY VARCHAR(255),CREATEDDATE TIMESTAMP,FIELD VARCHAR(255),ISDELETED VARCHAR(255),OLDVALUE VARCHAR(5000),NEWVALUE VARCHAR(5000) )   
  LANGUAGE sql 
  SPECIFIC myschema.myfunction 
  NOT DETERMINISTIC 
  MODIFIES sql DATA 
  CALLED ON NULL INPUT 
  CONCURRENT ACCESS RESOLUTION DEFAULT 
  SET OPTION  ALWBLK = *ALLREAD,ALWcpyDTA = *OPTIMIZE,COMMIT = *NONE,DECRESULT = (31,31,00),DYNDFTCOL = *NO,DYNUSRPRF = *USER,SRTSEQ = *HEX   
  RETURN SELECT ID,ACCOUNTID,CREATEDBYID,CREATEDBY,CREATEDDATE,FIELD,ISDELETED,OLDVALUE,NEWVALUE FROM production . myschema . mytable  ; 
  

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)