2016-04-14 7 views
0

列の値を変更しますこんにちは、私はそれがは、Oracle

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) 

編集:私は追加することによって、それを解決し、 "ここでNEW.numero_commande = Commande.numero_commande;"私の引き金に ありがとう

+1

テーブルCOMMANDEの構造を教えてください。それは問題です。 –

答えて

0

テーブルCOMMANDEの列NUMERO_COMMANDEには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制約を削除します。