加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:22:17 所属栏目:百科 来源:网络整理
导读:所以 this question的评论提到,PostgreSQL中的“Stored Procedrues”和“Stored Funtions”略有不同. 注释链接到wikipedia article,但其中一些似乎不适用(例如,它们可以在SELECT语句中使用). syntax本身似乎有点令人困惑: CREATE FUNCTION emp_stamp() RETU
所以 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查看问题时一个非常混杂的受众,你应该避免假设过多,使用更清晰的术语或定义你期望的属性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读