Function DB2字符串标记器

Function DB2字符串标记器,function,stored-procedures,db2,db2-luw,Function,Stored Procedures,Db2,Db2 Luw,我正在使用一个字符串标记器代码,如下所示——这是我前面的问题中的代码。如果没有限定符,它可以正常工作,但只要我向它添加限定符KGT(架构名称),我就会得到一个错误: 这些条款相互排斥。SQLCODE=-628,SQLSTATE=42613, 驱动程序=4.17.36 SQL代码:-628,SQL状态:42613 创建函数regexp\u标记化\u编号( 来源:varchar(1000)) 返回表(tok整数) 特定regexp\u标记化\u编号 语言SQL 限定符KGT 确定性 没有外部行动

我正在使用一个字符串标记器代码,如下所示——这是我前面的问题中的代码。如果没有限定符,它可以正常工作,但只要我向它添加限定符KGT(架构名称),我就会得到一个错误:

这些条款相互排斥。SQLCODE=-628,SQLSTATE=42613, 驱动程序=4.17.36 SQL代码:-628,SQL状态:42613


创建函数regexp\u标记化\u编号(
来源:varchar(1000))
返回表(tok整数)
特定regexp\u标记化\u编号
语言SQL
限定符KGT
确定性
没有外部行动
回来
选择tok
从xmltable('for$id in tokenize($s,,'))返回{string($id)}
将强制转换(源为varchar(1000))传递为“s”
柱
tok integer path“如果(.castable as xs:integer)那么xs:integer(.)else()”
)t

Windows上的DB211不支持这种XPATH语法。
这适用于DB2forLUW,但不适用于DB2forIBMi


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

哪个操作系统运行您的DB2服务器?(z/os,i-series,linux/unix/windows)?@Ryan请提供一个指向DB2文档的链接,其中允许使用
限定符
关键字创建
SQL标量
函数。这里提到-对于系统命名,函数将在限定符指定的模式中创建。如果未指定限定符:如果当前模式特殊寄存器的值为*LIBL,则将在当前库(*CURLIB)中创建函数。否则,将在当前架构中创建函数。该语法(限定符)仅在特定情况下对DB2forz/OS有效。它对i系列或LUW无效。在请求Db2方面的帮助时,如果没有指定Db2服务器平台,那就是在浪费我们的时间。您可以在文本中或标记中指明平台(db2-400(i系列)或db2-z/os或dbw luw有特定的标记。@Ryan还有一个建议:如果您使用3个db2中的一个(
DB2forLUW
,在您的情况下),那么不要使用另一个db2中的文档(
DB2forIBMi
,正如您在上面的评论中提供的那样).使用相应的一个:

    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