postgresql – “存储过程”和“存储函数”之间有什么区别?

前端之家收集整理的这篇文章主要介绍了postgresql – “存储过程”和“存储函数”之间有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以 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中存在的功能.

现在,当Postgresql社区中的人们谈论“存储过程”或“真实存储过程”时,他们通常意味着类似函数的对象的假设特征,它可以在其体内启动和停止事务,这是当前函数不能实现的.做.在此上下文中使用术语“存储过程”似乎与其他数据库产品类似.请参阅this mailing list主题以获得一个模糊的想法.

然而,在实践中,功能与程序在事务控制能力方面的区别并未得到普遍接受,当然,许多没有数据库偏差的程序员会将程序的Pascal式解释视为没有返回值的函数. (sql标准似乎采取了中间立场,因为默认情况下,一个过程具有与函数不同的事务行为,但这可以根据对象进行调整.)所以在任何情况下,尤其是在使用Stack Exchange查看问题时一个非常混杂的受众,你应该避免假设过多,使用更清晰的术语或定义你期望的属性.

猜你在找的Postgre SQL相关文章