CodeGym /课程 /SQL SELF /PL/pgSQL入门

PL/pgSQL入门

SQL SELF
第 49 级, 课程 0
可用

PostgreSQL可不只是会“说”SQL哦!来认识一下:PL/pgSQL(Procedural Language/PostgreSQL Structured Query Language),这是PostgreSQL自带的过程式编程语言。它就是为了让你用SQL语句和各种控制结构(比如IF、CASE条件,还有LOOP、FOR、WHILE循环)来搞定复杂操作而生的。

PL/pgSQL和SQL,就像自动化流水线和普通“手动”工具(比如锤子)。SQL就像锤子,靠谱是靠谱,但每一下都得你自己抡。PL/pgSQL就像自动化流水线:你只要一次性设定好要干啥、怎么干,后面全自动,自己执行命令、记东西、检查出错了没,出点小岔子还能自己继续。为啥还要自己一锤一锤敲钉子?直接看着它自己干活不香吗?这不就是梦想吗?

PL/pgSQL和普通SQL语句的对比

咱们来看看PL/pgSQL和普通SQL语句到底有啥区别。

SQL用来搞单一任务特别溜,比如查出表里所有学生,或者插入一行新数据。但一旦你遇到“如果这样就那样”这种逻辑,或者需要重复做同样的事,SQL就有点力不从心了。

比如说,你要:

  1. 检查表里是不是已经有这个学生的记录。
  2. 如果有——就更新数据。
  3. 如果没有——就插入新记录。

用普通SQL你得写好几个语句,还得在客户端处理结果。用PL/pgSQL,这些全能写进一个过程,直接在数据库里搞定。

PL/pgSQL在复杂项目里特别有用。它能让你:

  • 把中间结果存到变量里;
  • 处理异常,数据库遇到意外不会直接“崩”;
  • 用循环和条件语句写复杂算法。

PL/pgSQL的应用场景

PL/pgSQL常见的用法有这些:

  1. 自动化任务。 比如,每次数据更新时自动往日志(log)表插入一条记录。

  2. 业务逻辑。 比如你有个规则:学生如果旷课超过5次,就自动标记为“非活跃”。直接把这个规则写进PL/pgSQL函数里多省事?

  3. 数据分析和报表。 不用把数据来回传到客户端,直接在服务器端聚合处理。

  4. 触发器。 PL/pgSQL常用来写触发器,自动在插入、更新或删除数据时执行操作。

PL/pgSQL的使用例子

来看个小例子:写个函数,接收两个数字,相加后返回结果:

CREATE FUNCTION add_numbers(a INT, b INT) RETURNS INT AS $$
BEGIN
    RETURN a + b;
END;
$$ LANGUAGE plpgsql;

解释:

  • CREATE FUNCTION add_numbers(a INT, b INT) —— 创建一个叫add_numbers的函数,接收两个INT(整数)参数。
  • RETURNS INT —— 表示函数返回一个整数。
  • BEGIN ... END —— 这是主代码块,写函数逻辑的地方。
  • RETURN a + b; —— 把两个数加起来返回。

要调用这个函数,用普通SQL语句就行:

SELECT add_numbers(10, 20);

结果:30。

注意事项和限制

PL/pgSQL很强大,但用的时候要注意:

  • 性能:函数太复杂会拖慢数据库,记得多测试多优化。
  • 测试:函数里的bug不调用根本发现不了,记得写测试!
  • 可读性:函数和过程太大、逻辑太绕以后自己都看不懂。写代码要考虑一个月后自己还能看懂。

现在你已经大致了解PL/pgSQL是啥了,接下来我们会继续聊它的语法和主要功能。后面会学怎么写代码块、声明变量、用各种数据类型。一起开启数据库编程之旅吧!

2
任务
SQL SELF, 第 49 级, 课程 0
已锁定
创建一个简单的加法函数
创建一个简单的加法函数
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION