0

这似乎很简单,但我尝试了几个小时来弄清楚,但我做不到..

我希望创建一个像合并一样工作的 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

谢谢你的帮助。

4

2 回答 2

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;
于 2013-08-19T15:25:53.953 回答
0

空字符串不是格式良好的 XML 片段,因此 XML 主变量不可能是空字符串。如果您的意思是检查 NULL 值,正如函数名所暗示的那样,它应该看起来像

CASE WHEN X1 IS NULL THEN X2 ELSE X1 END

在标准 SQL 中,NULL 和空字符串是不同的东西。

于 2013-08-19T17:08:43.333 回答