首页 > 解决方案 > db2 - CREATE FUNCTION 中的 CASE WHEN 或 IF 语句

问题描述

嗨,我在 DB2 中的 CREATE FUNCTION 调用中管理 CASE WHEN 或 IF 语句时遇到问题我尝试了以下语句:

CREATE OR REPLACE FUNCTION NAECHSTES_DATUM(PARAM1 CHAR(6), PARAM2 DATE)
RETURNS DATE
LANGUAGE SQL
BEGIN
    DECLARE BASEDATE DATE;
    DECLARE THATDATE DATE;
    SET BASEDATE = TO_DATE(CONCAT(PARAM1,CAST(YEAR(PARAM2) AS CHAR(4))),'DD.MM.YYYY');
    IF (BASEDATE >= PARAM2) 
    THEN SET THATDATE = BASEDATE;
    ELSE SET THATDATE = BASEDATE + 1 YEAR;
    END IF;
    RETURN THATDATE;
END 

我收到这个错误

[-104] Auf "+ 1 YEAR" folgte das unerwartete Token "END-OF-STATEMENT"。Mögliche 令牌:“ END IF”.. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.14.113

当我使用 CASE WHEN 时,结果类似。

你知道问题可能出在哪里吗?

标签: functionif-statementdb2case

解决方案


在函数的 END 之后使用替代语句分隔符。

在函数内部,语句分隔符是分号 (;)

但是 Db2 需要知道一个额外的分隔符来指示块的结尾。

对于 Db2 命令行(在 shell 脚本、批处理文件中),您可以使用“-td@”命令行选项并使用 @ 字符终止块。在包含您可以使用的函数的文件中:

--#SET TERMINATOR @
功能块之前的任何位置,然后用 @ 终止块

如果您使用 GUI 工具提交 DDL 或 SQL,则每个 GUI 工具都有自己的方式来指定替代语句分隔符。查看设置和属性。在您的问题中完整描述您的工具集(哪些程序、哪些版本、哪些操作系统等)总是明智的。


推荐阅读