Function DB2字符串标记器
我正在使用一个字符串标记器代码,如下所示——这是我前面的问题中的代码。如果没有限定符,它可以正常工作,但只要我向它添加限定符KGT(架构名称),我就会得到一个错误: 这些条款相互排斥。SQLCODE=-628,SQLSTATE=42613, 驱动程序=4.17.36 SQL代码:-628,SQL状态:42613Function 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 确定性 没有外部行动
创建函数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