系统间缓存中返回意外的 SQL 错误<UNDEFINED>



问题

我正在通过缓存ODBC驱动程序从系统间缓存数据库导出数据。有一个特定的表给了我一条错误消息。ODBC驱动程序崩溃,并从缓存系统报告错误。我想我能够追踪错误的来源,但我不知道如何调试或修复错误。

我试图提取的表名为SEDMIHP

错误如下:

[Cache Error: <<UNDEFINED>%0AmBd16^%sqlcq.PRD.3284 ^SEDMIHP(4,77)>]
[Location: <ServerLoop - Query Fetch>]

研究/试验;错误

我打开了CacheManagementStudio,找到了与表名匹配的类。我应该提到的是,这是我第一次使用Intersystems Cache,所以如果我在这里听起来很愚蠢或缺乏经验,我很抱歉。

SQLMap中,我发现了以下代码:

<Data name="DESCRIP_2">
<RetrievalCode> S {DESCRIP_2}=$P($G(^PHPROP({L1},"DESC_CODES")),"",2) S {DESCRIP_2}=$S($L({DESCRIP_2}):^SEDMIHP($P({DESCRIP_2},","),$P({DESCRIP_2},",",2)),1:{DESCRIP_2})
S {DESCRIP_2}=$E({DESCRIP_2},1,80)
</RetrievalCode>
</Data>

我认为这里的代码导致了一个问题。由于我对ObjectScript的理解非常有限,我认为这段代码是在操纵文本/字符串,也许如果数据中有一个未定义或错误的值,它会导致这些函数抛出错误?

我对缓存管理门户的访问权限有限,并且我能够在SQL架构中找到该表并对其运行查询。在出现上述错误之前,大约加载了300行数据,并且它停止加载更多的行。这就是为什么我认为数据不好的原因。

我尝试在SELECT语句中使用ISNULL()IFNULL()来尝试跳过任何坏数据,但每次都在同一位置出现相同的错误。

问题

  1. SQL方面是否有一个简单的解决方案可以避免此错误
  2. 我可以对Studio中的类代码做些什么来调试或获取有关此错误的更多信息吗

非常感谢您的帮助!

其他信息

缓存版本:Cache for OpenVMS/IA64 V8.4 (Itanium) 2012.1.5 (Build 956 + Adhoc 12486) 17-APR-2013 19:49:58.07

感谢InterSystems社区的Dmitry Maslennikov,他为我回答了这个问题。

在Class代码中,我所要做的就是围绕全局^SEDMIHP添加一个$Get()函数调用。工作代码如下:

<Data name="DESCRIP_2">
<RetrievalCode> S {DESCRIP_2}=$P($G(^PHPROP({L1},"DESC_CODES")),"",2) S {DESCRIP_2}=$S($L({DESCRIP_2}):$Get(^SEDMIHP($P({DESCRIP_2},","),$P({DESCRIP_2},",",2))),1:{DESCRIP_2})
S {DESCRIP_2}=$E({DESCRIP_2},1,80)
</RetrievalCode>
</Data>

InterSystems社区答案的链接可以在这里找到。

相关内容

最新更新