修改列值Oracle

时间:2016-04-14 20:24:44

标签: oracle plsql triggers

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

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)
编辑:我通过添加&#34来解决它:其中:NEW.numero_commande = Commande.numero_commande;&#34;我的触发器。 谢谢

1 个答案:

答案 0 :(得分:0)

NUMERO_COMMANDE中的列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约束。