【问题标题】:sql error trigger instead ofsql错误触发器而不是
【发布时间】:2017-12-13 14:47:08
【问题描述】:

我正在尝试创建一个代替触发器,但我不断收到此错误:第 11 行错误:PL/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';
  • 号码来自客户
  • nrbilet、sursa、destinatia、clasa、valoare 来自比莱特

唯一的主键是 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;`

【问题讨论】:

  • 不确定错误在哪里,但您几乎可以用 MERGE 语句替换大部分代码。
  • 不确定它是否只是一个转录的东西,但在你的第二个更新语句中,你在分号后有一个空格,例如 Bilete.clasa =: new.clasa insted of Bilete.clasa = :new.clasa

标签: oracle plsql database-trigger


【解决方案1】:

在 ELSE 分支中,您的作业在冒号后有一个空格 - =: new,这是无效的语法。冒号必须是:new 命名空间的一部分,像这样

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2014-01-04
    • 2015-07-20
    相关资源
    最近更新 更多