Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Sql 而不是视图上的触发器函数_Sql_Oracle_Plsql - Fatal编程技术网

Sql 而不是视图上的触发器函数

Sql 而不是视图上的触发器函数,sql,oracle,plsql,Sql,Oracle,Plsql,我来到了另一个站点,它是应该能够在视图上运行的代替触发器 CREATE OR REPLACE VIEW hospital_specialty AS SELECT street, housenumber, postcode, place,designation, contactperson FROM hospital, specialization WHERE hospital_id, hospital; CREATE OR REPLACE TRIGGER hospital_trigger I

我来到了另一个站点,它是应该能够在视图上运行的代替触发器

CREATE OR REPLACE VIEW hospital_specialty AS SELECT street, housenumber,
postcode, place,designation, contactperson FROM hospital, specialization WHERE hospital_id, hospital;


CREATE OR REPLACE TRIGGER hospital_trigger
INSTEAD OF INSERT ON hospital_specialty
FOR EACH ROW
DECLARE 
v_hospitalid INT;
v_street  VARCHAR(45);
v_hnumber INT;
v_postcode INT;
v_place VARCHAR(45);
v_reachability VARCHAR(45);



BEGIN
v_hospitalid := :NEW.hospital;
v_street := :NEW.street;
v_hnumber  := :NEW.housenumber;
v_postcode := :NEW.postcode;
v_place := :NEW.place;
v_reachability := :NEW.reachibility_phone;


INSERT INTO hospital VALUES (v_hospitalid , v_street , v_hnumber, v_postcode , v_place, v_reachability);

INSERT INTO specialty VALUES (:NEW.specialty_ID, :NEW.designation, :NEW.contactperson, :NEW.hospital);
END;
/
我得到的错误,但我不知道如何解决它们是: PLS-00049:绑定变量“NEW.hospital\u ID”无效 依此类推所有其他“NEW.xyz”条目

及 PLS-00103:找不到符号插入


我就是找不到解决办法,不管我怎么做:/1提前谢谢大家

正如@GordonLinoff在他的评论中指出的,您不能在INSTEAD OF触发器中使用视图无法获取的字段。因此,您必须更改视图以获取所需的字段:

CREATE OR REPLACE VIEW HOSPITAL_SPECIALTY AS
  SELECT h.HOSPITALID,    -- HOSPITAL fields
         h.STREET,
         h.HOUSENUMBER,
         h.POSTCODE,
         h.PLACE,
         h.REACHABILITY,
         s.SPECIALTY_ID,  -- SPECIALIZATION fields
         s.DESIGNATION,
         s.CONTACTPERSON,
         s.HOSPITAL   
  FROM HOSPITAL h
  INNER JOIN SPECIALIZATION s
    ON h.HOSPITALID = s.HOSPITAL
然后你的扳机变成了

CREATE OR REPLACE TRIGGER HOSPITAL_SPECIALTY_II
  INSTEAD OF INSERT ON HOSPITAL_SPECIALTY
  FOR EACH ROW
BEGIN
  INSERT INTO HOSPITAL
    (HOSPITAL_ID,       STREET,      HOUSENUMBER,
     POSTCODE,          PLACE,       REACHABILITY)
  VALUES
    (:NEW.HOSPITAL_ID, :NEW.STREET, :NEW.HOUSENUMBER,
     :NEW.POSTCODE,    :NEW.PLACE,  :NEW.REACHABILITY);

    INSERT INTO SPECIALIZATION
      (SPECIALTY_ID,       DESIGNATION,     CONTACTPERSON,      HOSPITAL)
    VALUES
      (:NEW.SPECIALTY_ID, :NEW.DESIGNATION, :NEW.CONTACTPERSON, :NEW.HOSPITAL);
END HOSPITAL_SPECIALTY_II;

视图未返回hospitalid,因此无法在触发器中使用它。你还应该学会使用正确的、明确的、标准的、可读的、连接语法。非常感谢:非常感谢,这就是它的作用