SQL 存储过程中的“引用旧”和“引用新”有啥区别?

Posted

技术标签:

【中文标题】SQL 存储过程中的“引用旧”和“引用新”有啥区别?【英文标题】:What is the difference between "referencing old" & "referencing new" in a SQL stored procedure?SQL 存储过程中的“引用旧”和“引用新”有什么区别? 【发布时间】:2011-09-08 04:16:26 【问题描述】:

我不确定这个语法是否是 Informix 特有的,但是我在创建触发器时遇到了麻烦,直到我找到了一些包含这些行之一或两者的语法:

CREATE TRIGGER      accuplacer_trig
UPDATE OF           processed
ON                  accuplacer_rec
REFERENCING OLD AS  proc_pre_upd 
FOR EACH ROW        (EXECUTE PROCEDURE accuplacer_proc(proc_pre_upd.exam_num));

有时写成REFERENCING OLD AS alias1, NEW AS alias2

REFERENCING OLD ASREFERENCING NEW AS 有什么区别,它们做什么/为什么需要它们?

【问题讨论】:

感谢您的回答,我想可能是这样......这有点直观,但我只是想确保 有趣的是:我总是这样写:把旧的作为旧的,新的作为新的,并且对重复自己感到愤怒。 【参考方案1】:

“OLD”是更新前行中的数据。 “NEW”是更新完成后将出现在行中的数据。如果您希望触发器基于此信息采取行动,则需要访问此信息;通常,您确实想要这个,尽管并非总是如此。

此页面对在 Informix 上下文中使用触发器的这一方面进行了更冗长的讨论: http://www.pacs.tju.edu/informix/answers/english/docs/dbdk/infoshelf/sqlt/15.fm3.html

【讨论】:

【参考方案2】:

这是触发发生的值before and after;如下所述。

许多触发的 SQL 语句需要引用当前正在执行的数据 被导致它们触发的数据库事件更改。这 触发 SQL 语句可能需要引用新的(更改后或 "之后") 值。

...更改的数据可以在 使用转换变量或转换的触发 SQL 语句 表。引用子句允许您提供相关性 通过指定 OLD/NEW AS 为这些转换变量命名或别名 相关名称。

【讨论】:

以上是关于SQL 存储过程中的“引用旧”和“引用新”有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

mysql 与oracle中的存储过程及函数有啥区别,尽可能详细哦

存储过程和sql语句有啥区别

存储过程写在数据库中和程序里有啥区别?

程序中使用嵌套的sql语句和在数据库中写存储过程调用它,有啥区别?

SQL嵌套子查询和相关子查询的执行过程有啥区别

SQL嵌套子查询和相关子查询的执行过程有啥区别