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

标签 intersystems-cache objectscript

问题

我正致力于通过 Cache ODBC 驱动程序从 Intersystems Cache 数据库导出数据。有一个特定的表给我一条错误消息。 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 的理解非常有限,我认为这段代码正在操纵文本/字符串,如果数据中存在未定义或错误的值,可能会导致这些函数抛出错误?

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

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

问题

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

非常感谢任何帮助!

附加信息

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

最佳答案

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

在类代码中,我所要做的就是在全局 ^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 社区答案的链接 here .

关于intersystems-cache - 意外的 SQL 错误在系统间缓存中返回 <UNDEFINED>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54448474/

相关文章:

mongodb - 系统间缓存和 MongoDB 比较

javascript - 无法通过系统间缓存服务器方法设置变量值

intersystems-cache - ByRef 和 Output 方法参数修饰符有什么区别?

objectscript - 这个建议对 InterSystem Russia 的 github 编码指南(宏)意味着什么?

java - 在 "Unicode"安装中,ObjectScript 的变量名中可以使用哪些字符?

java - 通过 Gateway Java 在缓存中设置代理 Java 对象的数据类型 java.util.Date 属性

java - Intersystems Caché 与 Java Gateway - 将参数作为 java.io.FileInputStream 传递

intersystems-cache - Caché ObjectScript 中的 Try-Finally 等价物

ide - InterSystems Caché 的外部 IDE

syntax - 系统间缓存对象脚本通过引用将属性作为参数传递