所以
this question的评论提到,Postgresql中的“Stored Procedrues”和“Stored Funtions”略有不同.
注释链接到wikipedia article,但其中一些似乎不适用(例如,它们可以在SELECT语句中使用).
syntax本身似乎有点令人困惑:
CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$ BEGIN [...] END; $emp_stamp$LANGUAGE plpgsql; CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp FOR EACH ROW EXECUTE PROCEDURE emp_stamp();
您创建一个FUNCTION但将其称为PROCEDURE.
那么这两者有什么区别?
正式来说,Postgresql只有“功能”.触发函数有时被称为“触发器过程”,但该用法没有明确的含义.在内部,函数有时称为过程,例如在系统目录pg_proc中.这是PostQUEL的延续.某些人(可能具有不同数据库系统经验)可能与程序相关联的任何功能(例如它们与防止sql注入或输出参数的使用相关)也适用于Postgresql中存在的功能.
原文链接:https://www.f2er.com/postgresql/192354.html现在,当Postgresql社区中的人们谈论“存储过程”或“真实存储过程”时,他们通常意味着类似函数的对象的假设特征,它可以在其体内启动和停止事务,这是当前函数不能实现的.做.在此上下文中使用术语“存储过程”似乎与其他数据库产品类似.请参阅this mailing list主题以获得一个模糊的想法.
然而,在实践中,功能与程序在事务控制能力方面的区别并未得到普遍接受,当然,许多没有数据库偏差的程序员会将程序的Pascal式解释视为没有返回值的函数. (sql标准似乎采取了中间立场,因为默认情况下,一个过程具有与函数不同的事务行为,但这可以根据对象进行调整.)所以在任何情况下,尤其是在使用Stack Exchange查看问题时一个非常混杂的受众,你应该避免假设过多,使用更清晰的术语或定义你期望的属性.