我正在通过缓存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()
来尝试跳过任何不良数据,但是每次都在同一位置出现相同的错误。
任何帮助都将不胜感激!
缓存版本:Cache for OpenVMS/IA64 V8.4 (Itanium) 2012.1.5 (Build 956 + Adhoc 12486) 17-APR-2013 19:49:58.07
答案 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社区答案的链接。