【问题标题】:I have a database. How do I create a trigger that uses information from two tables?我有一个数据库。如何创建使用来自两个表的信息的触发器?
【发布时间】:2018-12-02 21:11:10
【问题描述】:

我已经创建了这两个表:

CREATE TABLE oferta
(
    id_agentie INT,
    id_spatiu INT,
    vanzare CHAR(1),
    pret INT,
    moneda CHAR(5),
    CONSTRAINT pk_oferta PRIMARY KEY(id_agentie, id_spatiu)
);

CREATE TABLE Spatiu
(
    id_spatiu INT PRIMARY KEY,
    adresa VARCHAR(45),
    zona INT,
    suprafata INT,
    id_tip INT
);

我需要创建一个触发器,每当我插入一个新的 'pret' 时。如果 'pret' 的值小于 2 * 'suprafata',那么我想将 'pret' 的值更改为2 * 'suprafata' 和 'moneda' 的值转换为 'EUR'。

我已经尝试过,但我无法完成它。

编辑:我正在使用 MySql。抱歉没有具体说明。

【问题讨论】:

  • 触发器是高度特定于供应商的 - 所以请添加一个标签来指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或完全不同的东西。

标签: mysql sql database triggers create-table


【解决方案1】:

这里有一个代码 sn-p 应该可以满足您的需求。

触发器将在每次插入 oferta 之前运行。它将首先运行查询以恢复表spatiu 对应记录中suprafata 的值,然后将其与传递给插入顺序的pret 值进行比较。当pret (严格)小于两倍suprafata 时,触发器会修改pretmoneda 的值。

DELIMITER //
CREATE TRIGGER my_trigger
    BEFORE INSERT ON oferta
    FOR EACH ROW 
BEGIN
    DECLARE v1 INT;
    SELECT suprafata INTO v1 WHERE id_spatiu = NEW.id_spatiu;
    IF ( NEW.pret < 2 * v1) THEN
        NEW.pret = 2 * v1;
        NEW.moneda = 'EUR';
    END IF
END//
DELIMITER ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多