看起来很简单,但我花了好几个小时才想出来,但我不能......
我希望创建一个类似于coalesce的db2函数。
不同之处在于它查找第一个参数的值,如果它是一个空字符串''。然后它将使用第二个参数。
那是我做的查询
CREATE FUNCTION COALESCEEMPTY (X1 XML, X2 XML)
RETURNS XML
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
CASE X1
WHEN '' THEN RETURN X2;
ELSE RETURN X1;
END CASE;
这是我从db2获得的错误代码。
16:09:47 [CREATE - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=X1
WHEN '' THEN RETURN X2;ERMINISTIC
CASE;<space>, DRIVER=4.13.127
16:09:47 [ELSE - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=RETURN;ELSE ;JOIN <joined_table>, DRIVER=4.13.127
16:09:47 [END - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=END-OF-STATEMENT;END CASE;JOIN <joined_table>, DRIVER=4.13.127
感谢您的帮助。
答案 0 :(得分:0)
我只在Teradata上执行SQL UDF,但DB2语法非常相似。 这应该工作
CREATE FUNCTION COALESCEEMPTY (X1 XML, X2 XML)
RETURNS XML
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
RETURN
CASE WHEN X1 = '' THEN X2 ELSE X1 END;
答案 1 :(得分:0)
空字符串不是格式良好的XML片段,因此XML主机变量不应该是空字符串。如果您要检查函数名称所暗示的NULL值,它应该看起来像
CASE WHEN X1 IS NULL THEN X2 ELSE X1 END
在标准SQL中,空字符串是不同的东西。