意外的SQL错误在系统间缓存中返回<未定义>

时间:2019-01-30 19:50:47

标签: intersystems-cache objectscript

问题

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

我要提取的表称为SEDMIHP

这是错误:

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

研究/尝试与错误

我能够打开Cache Management Studio并找到与表名匹配的类。我应该提到,这是我第一次使用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的了解非常有限,我认为这段代码正在操纵文本/字符串,并且也许如果数据中存在未定义或错误的值,则会导致这些函数引发错误?

我对Cache Management Portal的访问受到限制,并且能够在SQL Schema中找到该表并对其执行查询。在出现与上述相同的错误之前,已加载约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

1 个答案:

答案 0 :(得分:2)

信贷转给InterSystems社区的 Dmitry Maslennikov ,他为我回答了这个问题。

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

<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>

可以找到here到InterSystems社区答案的链接。