Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle sql错误触发器,而不是_Oracle_Plsql_Database Trigger - Fatal编程技术网

Oracle sql错误触发器,而不是

Oracle sql错误触发器,而不是,oracle,plsql,database-trigger,Oracle,Plsql,Database Trigger,我正在尝试生成一个instead of触发器,但我一直得到以下错误:第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'; nume来自Clienti 纳比莱、苏尔萨、德

我正在尝试生成一个instead of触发器,但我一直得到以下错误:第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';
nume来自Clienti 纳比莱、苏尔萨、德斯特纳提亚、克拉萨、瓦洛雷来自比莱特 唯一的主键是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;`

在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

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