提问人:IvanMafia 提问时间:4/18/2023 最后编辑:marc_sIvanMafia 更新时间:4/18/2023 访问量:80
为什么我的 BEGIN 命令在 SQL 上不起作用
Why isn't my BEGIN command working on SQL
问:
我有这段代码来创建一个函数。但它告诉我 BEGIN 中的命令是错误的
CREATE FUNCTION transform_activebool(activebool CHAR(1))
RETURNS VARCHAR(10)
BEGIN
IF activebool = 't' THEN
RETURN 'Active';
ELSE
RETURN 'Inactive';
END IF;
END;
我尝试移动语法并查看命令,但它不起作用。BEGIN
答:
0赞
RCoupy
4/18/2023
#1
试试这个:
CREATE FUNCTION transform_activebool(activebool CHAR(1))
RETURNS VARCHAR(10)
language plpgsql
as
$$
begin
IF activebool = 't' THEN
RETURN 'Active';
ELSE
RETURN 'Inactive';
END if;
END;
$$
0赞
Frank Heikens
4/18/2023
#2
使用有效的语法。在这种情况下,您可以使用简单的 SQL 函数,使用 CASE 来选择正确的输出:
CREATE FUNCTION transform_activebool(activebool CHAR(1))
RETURNS VARCHAR(10)
LANGUAGE SQL -- you always have to define the language
STRICT -- RETURNS NULL on NULL input
IMMUTABLE -- always returns the same output for the same input
AS
$$ -- function body starts here:
SELECT
CASE
WHEN activebool = 't'
THEN 'Active'
ELSE 'Inactive'
END CASE;
$$; -- end of the function body
-- test:
SELECT transform_activebool('t') -- Active
, transform_activebool('x') -- Inactive
, transform_activebool(NULL); -- NULL
这个函数非常简单,不需要plpgsql语言,因此不需要BEGIN和END。
评论
DELIMITER $$
DELIMITER ;
plpgsql