【问题标题】:Modify column value Oracle修改列值 Oracle
【发布时间】:2016-08-06 14:36:47
【问题描述】:

您好,我已经制作了一个可以编译的触发器

CREATE OR REPLACE TRIGGER livraisonfinie

    BEFORE  UPDATE  ON Expedition
    FOR EACH ROW 

    DECLARE

    BEGIN   

        IF :NEW.date_livraison <> TO_DATE('3000/01/01 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
        THEN
            INSERT INTO Commande (etat) VALUES ('livree');

            DELETE FROM cmdalivrer CMD  WHERE :NEW.numero_commande=CMD.id_cmd WHERE :NEW.numero_commande= Commande.numero_commande;;

        END IF ;
    END;
    /

当我尝试更新探险表的值时出现此错误

ORA-01400: cannot insert NULL into ("HAMZA"."COMMANDE"."NUMERO_COMMANDE")
ORA-06512: at "HAMZA.LIVRAISONFINIE", line 10
ORA-04088: error during execution of trigger 'HAMZA.LIVRAISONFINIE'

我已经使用了这个更新请求,但不确定我是否必须使用 INSERT INTO 或 UPDATE 以及即使阅读了许多手册之后的正确性。

这是桌子

Expedition(Id_Expedition ,#id_chauffeur,#Immatriculation, #Id_Itineraire,Date_Deb_Expedition , Date_Livraison) 
Commande (numero_commande,Date_commande,adresse_livraison,id_part,ville_livraison,code_postal_livraison,etat,id_expedition)

编辑:我通过添加“where :NEW.numero_commande= Commande.numero_commande;”解决了这个问题到我的触发器。 谢谢

【问题讨论】:

  • 向我们展示 COMMANDE 表的结构,因为这就是问题所在。

标签: oracle plsql triggers


【解决方案1】:

COMMANDE 中的列 NUMERO_COMMANDE 存在 NOT NULL 约束。

您可以在此处找到有关此约束的更多信息: http://www.w3schools.com/sql/sql_notnull.asp

默认情况下,表列可以保存 NULL 值。

SQL NOT NULL 约束

NOT NULL 约束强制列 不接受 NULL 值。

NOT NULL 约束强制字段始终包含一个值。 这意味着您不能插入新记录或更新记录 不向该字段添加值。

在您的触发器中为该字段提供一个值:

INSERT INTO Commande (etat,NUMERO_COMMANDE) 
VALUES ('livree', some-value-for-numero-commande-column);

或从表中删除此列的 NOT NULL 约束。

【讨论】:

    猜你喜欢
    • 2013-03-17
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    相关资源
    最近更新 更多