模块课程(2/4)
使用 PL/pgSQL 的高级逻辑
用 LANGUAGE sql 编写的函数只能依次运行标准查询。如果我们需要一些更高级的东西,比如“如果输入的总数大于 100,那么应用折扣”,普通的裸 SQL 无法单独做到这一点。我们需要使用 PL/pgSQL,这是一种内置于 Postgres 中的成熟的过程编程语言。
在 PL/pgSQL 中,我们添加了由 BEGIN .. END、变量和条件语句组成的经典主体。
CREATE OR REPLACE FUNCTION valuta_cliente(ordini INTEGER)
RETURNS TEXT AS $$
BEGIN
IF ordini > 10 THEN
RETURN 'VIP';
ELSE
RETURN 'Standard';
END IF;
END;
$$ LANGUAGE plpgsql;这种能力让我们能够卸载大量的重复逻辑块,否则我们将用 JS 编写,将它们打包到安全、快速的函数中,以非常低的延迟在数据附近执行!
自己尝试一下
我们想要一个复杂的函数,如果它已经存在,它会替换它自己('get_price_label'),接受'price'作为NUMERIC,并返回一个详细的TEXT。\n使用PL/pgSQL。打开 BEGIN。\n编写逻辑:如果价格 > 100.00,则返回字符串“Premium”。 ELSE 返回 'Economico'。\n关闭条件 END;和身体。
显示提示
创建或替换函数 get_price_label(price NUMERIC) 返回文本为 $$ BEGIN IF 价格 > 100.00 THEN RETURN 'Premium';否则返回“经济”;结束如果;结尾; $$ 语言 plpgsql;
3 次尝试后可用的解决方案
您可以在 BEGIN 之前使用 DECLARE 关键字声明临时变量。\n编写一个函数 'saluta_utente(userid INTEGER)' -> 返回 TEXT、PL/pgSQL 逻辑。\n在其中 DECLARE 一个字符串变量 'nome_utente TEXT;'。\n然后,在 BEGIN 中,通过使用特殊子句 'SELECT first_name 动态查询 'customers' 来填充该变量。 INTO nome_utente FROM...其中 id = userid'。最后,RETURN 将变量连接到“Ciao”。
显示提示
声明 nome_utente 文本; \nBEGIN SELECT first_name INTO nome_utente... \nRETURN '再见' ||诺姆_尤坦特;
3 次尝试后可用的解决方案