2017-12-10 12 views
0

私が代わりにトリガーの作成しようとしていますが、私はこのエラーを得続ける:11行でエラー:PL/SQLを:ここでSQLエラー・トリガーの代わりに、

を無視SQL文は私のコードです:

CREATE VIEW BiletNouVIP AS 
SELECT nume, nrbilet, sursa, destinatia, clasa, valoare 
FROM Clienti c, Bilete b 
WHERE b.idclient = c.idclient AND c.statut = 'VIP'; 
  • ヌメはBilete

のみPRからvaloareあり、クライアント1から

  • nrbilet、sursa、destinatia、clasaあります=: new無効な構文である - imary鍵は、あなたの割り当ては、コロンの後にスペースを持っているELSEブランチでnrbilet

    CREATE OR REPLACE TRIGGER new_BiletNouVIP 
        INSTEAD OF INSERT ON BiletNouVIP FOR EACH ROW 
    DECLARE 
        rowcnt integer := 0; 
    BEGIN 
        INSERT INTO Clienti(nume) 
        VALUES(:new.nume); 
        SELECT COUNT(*) INTO rowcnt FROM Bilete WHERE nrbilet = :new.nrbilet; 
        IF rowcnt = 0 THEN  
        INSERT INTO Bilete(nrbilet, clasa, valoare, sursa, destinatia) 
        VALUES (:new.nrbilet, :new.clasa, :new.valoare, :new.sursa, :new.destinatia); 
        ELSE 
        UPDATE Bilete 
        SET Bilete.clasa =: new.clasa, Bilete.valoare =: new.valoare, Bilete.sursa =: new.sursa, Bilete.destinatia =: new.destinatia 
        WHERE Bilete.nrbilet =: new.nrbilet; 
        END IF; 
    END;` 
    
  • +0

    わからないように、:new名前空間の一部である必要がありますが、あなたはかなりMERGE文でコードの大部分を置き換えることができます。 – OldProgrammer

    +0

    それはちょうど転写物なのかどうか分かりませんが、2番目の更新文でセミコロンの後ろにスペースがある場合 例:Bilete.clasa =:new.clasa insted of Bilete.clasa =:new.clasa –

    答えて

    1

    です。コロンは、エラーがある場合、この

    UPDATE Bilete 
        SET Bilete.clasa = :new.clasa, 
         Bilete.valoare = :new.valoare, 
         Bilete.sursa = :new.sursa, 
         Bilete.destinatia = :new.destinatia 
    WHERE Bilete.nrbilet = :new.nrbilet 
    
    +0

    これは機能します!どうもありがとう! –

    関連する問題