【问题标题】:db2 REGEXP_INSTR issue with large input string带有大输入字符串的 db2 REGEXP_INSTR 问题
【发布时间】:2021-08-02 23:58:51
【问题描述】:

DB2 正则表达式 REGEXP_INSTR 使用主机变量(pl1 程序)完美地工作,但是当输入字符串超过 360 个字符时它会出现问题,尾随空格不会成为问题。



        3 Info          CHAR(378),

       EXEC SQL
       SELECT REGEXP_INSTR(:Info,
                           :RG_EXPR,
                           1,
                           1)
             INTO   :REGEXP_START
             FROM SYSIBM.DUAL;

错误信息:

SQL0302N EXECUTE 或 OPEN 语句中的主变量值超出了相应用途的范围。 .SQL 状态=22001。

编辑:当我改用 VAR CHAR 变量时,问题似乎得到了解决。但是这个问题出现在输入量很大的非 var char 字段中。

【问题讨论】:

  • 请编辑您的问题以显示您看到的错误消息的确切文本,以及主机变量的确切定义。
  • 问题被标记为“需要详细信息或澄清”。我之前编辑过它,包括所有细节。不知道stackoverflow是怎么得出这个结论的

标签: sql regex db2


【解决方案1】:

这与 regexp_instr() 的关系不如简单的基础知识。

相反,它涉及 Db2 数据库基础,特别是固定长度字符串的最大长度。

Db2 中的固定长度字符串(SQL 中的数据类型 CHAR)可以占用 1 到 255 个字节。

可变长度字符串(数据库类型 VARCHAR 等)可以占用 1 到 32,672 个字节。

如果您需要更长的字符串,那么您需要使用大对象(例如 CLOB,它最多允许 2GB)。

请参阅您的 Db2 平台(z/os、i 系列、linux/unix/windows)上的 Db2 版本的文档。

您的主机变量需要反映这些规则,并且您的主机变量必须匹配(或完全兼容)它们被分配到/从其分配的数据库列或结果集列。

【讨论】:

  • 好的,这可能是原因。通常与 db 列关联的主机变量,其中需要使用适当的变量类型。在这种情况下,它就像内置函数一样使用。带有尾随空格的固定变量可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多