【问题标题】:DB2 String TokenizerDB2 字符串标记器
【发布时间】:2019-05-23 14:29:21
【问题描述】:

我正在使用如下的字符串标记器代码 - 从我之前的问题中得到它。没有 QUALIFIER 就可以正常工作,但是一旦我将 QUALIFIER KGT(模式名称)添加到它 - 我收到一个错误:

这些条款是互斥的。 SQLCODE=-628,SQLSTATE=42613, DRIVER=4.17.36 SQL 代码:-628,SQL 状态:42613


    create function regexp_tokenize_number(
      source varchar(1000))
    returns table (tok integer)
    SPECIFIC regexp_tokenize_number
    LANGUAGE SQL
    QUALIFIER KGT
    DETERMINISTIC
    NO EXTERNAL ACTION
    return
    select tok
    from xmltable('for $id in tokenize($s,",") return <i>{string($id)}</i>' 
    passing cast(source as varchar(1000)) as "s"
    columns
      tok integer path 'if (. castable as xs:integer) then xs:integer(.) else ()'
    ) t

Windows 上的 DB2 11

【问题讨论】:

  • 哪个操作系统运行您的 Db2 服务器? (z/os, i 系列, linux/unix/windows) ?
  • @Ryan 请提供 DB2 文档的链接,其中允许使用 QUALIFIER 关键字创建 SQL scalar 函数。
  • DB2 11. 这里提到 - 对于系统命名,函数将在限定符指定的模式中创建。如果未指定限定符:如果 CURRENT SCHEMA 特殊寄存器的值为 *LIBL,则将在当前库 (*CURLIB) 中创建函数。否则,该函数将在当前模式中创建。 ibm.com/support/knowledgecenter/en/ssw_ibm_i_73/db2/…
  • 该语法 (QUALIFIER) 仅在特定情况下对 Db2 for Z/OS 有效。它对 i 系列或 LUW 无效。在寻求有关 Db2 的帮助时,如果您没有指定您的 Db2 服务器平台,那么您就是在浪费我们的时间。您可以在文本中或在标签中指明平台(db2-400(i 系列)或 db2-z/os 或 dbw-luw 有特定的标签。
  • @Ryan 另一个建议:如果您使用 3 个 DB2 中的一个(在您的情况下为 Db2 for LUW),那么不要使用来自另一个的文档(DB2 for IBM i,正如您在评论中提供的那样多于)。使用对应的:CREATE FUNCTION (SQL scalar, table, or row)

标签: function stored-procedures db2 db2-luw


【解决方案1】:

DB2 for IBM i 不支持这样的 XPATH 语法。
这适用于 Db2 for LUW,但不适用于 DB2 for IBM i。

QUALIFIER 关键字在这两个 DB2 版本上的 CREATE FUNCTION 语句中没有被引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多