2016-05-23 12 views
0

Nachdem ich versuchen, eine neue Zeile in einer meiner Seiten auf APEX zu erstellen, wird folgende Fehlermeldung angezeigt:Fehler Reihe auf Formular Erstellen

ORA-02291: Integritätsbedingung (BD43015.SYS_C001194280) verletzt - übergeordneten Schlüssel nicht gefunden ORA-06512: bei "BD43015.INSERT_STUDENT", Zeile 4 ORA-04088: Fehler bei Ausführung des Triggers 'BD43015.INSERT_STUDENT' ORA-06512: bei "SYS.WWV_DBMS_SQL", Zeile 549 ORA-06512: bei "APEX_040000. WWV_FLOW_DML ", Zeile 1121 ORA-22816: Nicht unterstützte Funktion mit RETURNING-Klausel Fehler Die Zeile der Tabelle V_ALLSTUDENTS konnte nicht verarbeitet werden. OK

HINWEIS: Ich versuche, diesen Trigger zu verwenden:

create or replace trigger insert_student 
instead of insert on v_allstudents 
for each row 
begin 
    insert into members values(:new.memberID, :new.name, :new.birth, :new.regist_date, :new.address, :new.sex, :new.phone); 
    insert into students values(:new.memberID, :new.guardian, :new.rank, :new.plan_name, :new.plan_value); 
end; 
/

Und diese Ansicht:

create or replace view v_allstudents(memberID, name, birth, regist_date, address, sex, phone, guardian, rank, plan_name, plan_value) AS 
select members.memberID, name, birth, regist_date, address, sex, phone, guardian, rank, plan_name, plan_value 
from members, students 
where members.memberID = students.memberID 
order by members.name; 

Tabelle Mitglieder:

drop table members cascade constraints; 
create table members(
    memberID number(10) not null, 
    name varchar2(30) not null, 
    birth date not null, 
    regist_date date not null, 
    address varchar2(50) not null, 
    sex char(1) not null CHECK (sex IN ('F', 'M')), 
    phone number(9), 
    primary key(memberID) 
); 

Tabelle Studenten:

EDIT FIX: Wir hatten einen Trigger im Konflikt mit der Einfügung der memberID.

+0

Bitte buchen Sie die Tabellenstruktur für die Tabellen für Mitglieder und Schüler mit allen Einschränkungen. Außerdem können Sie versuchen, eine Zeile in die v_allstudents von SQLPLUS oder SQL Developer einzufügen. Dies hilft Ihnen zu verstehen, ob das Problem bei Oracle Apex liegt oder nicht. –

Antwort

0

Ich konnte das Problem von SQLPLUS erfolgreich reproduzieren.

Die folgende Anweisung funktioniert.

declare 
    v_memberid number; 
begin 
    insert into 
    v_allstudents(memberID, name, birth, regist_date, address, sex, phone, guardian, rank, plan_name, plan_value) 
    values 
    (1,'Neo',to_date('13-Jan-2009','dd-mon-yyyy'),to_date('13-Jan-2009','dd-mon-yyyy'),'My address','M',1234,'Trinity',1,'My Plan',2525) 
end; 

Die folgende Anweisung funktioniert nicht und wirft ORA-22816.

declare 
    v_memberid number; 
begin 
    insert into 
    v_allstudents(memberID, name, birth, regist_date, address, sex, phone, guardian, rank, plan_name, plan_value) 
values 
    (1,'Neo',to_date('13-Jan-2009','dd-mon-yyyy'),to_date('13-Jan-2009','dd-mon-yyyy'),'My address','M',1234,'Trinity',1,'My Plan',2525) 
    returning memberID into v_memberid; 
end; 

Hier ist die Beschreibung für den Fehler von Oracle-Dokumentation.

Die RETURNING-Klausel wird derzeit nicht für Objekttypspalten, LONG-Spalten, Remotetabellen, INSERT mit Unterabfrage, und INSTEAD OF Triggers unterstützt.

In diesem Fall generiert entweder Oracle Apex eine Insert-Anweisung mit der Rückgabe-Klausel, oder Sie haben in Oracle Apex einen benutzerdefinierten Code mit einer Rückgabe-Klausel geschrieben.

Ich würde empfehlen, anstatt Trigger und Einfügen von Werten in diese beiden Tabellen mit Oracle Apex Formen.

Verwandte Themen