模块课程(1/4)
UDF 和基本 SQL
到目前为止,我们一直在从 Node.js 服务器发送查询。但是,如果一个公式用于数十个不同的查询(例如计算包括增值税的最终价格),为什么要在 JavaScript 中重复数学运算呢? SQL 函数(用户定义函数 - UDF) 让我们在数据库本身内部创建“宏”。
以下是创建数学 SQL 宏的方法:
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC)
RETURNS NUMERIC AS $$
SELECT price * 1.22;
$$ LANGUAGE sql;一旦该命令运行,该函数将永远存在于我们的数据库中。可以从任何查询中调用它:
SELECT name, calculate_tax(unit_price) AS price_with_tax FROM products;动态创作
我们可以定义任意数量的变量,指定它们的类型,并且 LANGUAGE sql 将运行查询并隐式返回放置在美元符号 $$ 之间的最后一条语句。
自己尝试一下
创建一个名为“get_full_name”的简单可调用函数,该函数接受两个 TEXT 参数(“first_name”TEXT、“last_name”TEXT)。\n它必须返回一个 TEXT 值。\n在内部执行一个简单的 SELECT,将两个参数之间用一个空格连接起来,并将其声明为语言 sql。
显示提示
创建或替换函数 get_full_name(名字文本, 姓氏文本) 返回文本为 $$ SELECT 名字 || ' ' ||姓; $$ 语言 sql;
3 次尝试后可用的解决方案
在更高级的 UDF 中,我们可以嵌入整个查询。创建一个不接受任何参数并返回整数的函数“get_customer_count()”。\n在内部运行一个简单的“SELECT COUNT(id) FROMcustomers”。\n将其声明为纯 SQL 语言。
显示提示
注意:COUNT 返回一个 bigint,将其转换为 INTEGER 以匹配返回类型!创建或替换函数 get_customer_count() 返回整数 AS $$ SELECT CAST(COUNT(id) AS INTEGER) FROM 客户; $$ 语言 sql;
3 次尝试后可用的解决方案