Ich habe eine temporäre Tabelle, Daten, in denen sqlldr geladen wird. Die Daten in der temporären Tabelle wird wie folgt hinzugefügt:Daten nicht korrekt durch gespeicherte Prozedur hinzugefügt (Oracle 11g R2)
PHONE ADDRESS ORDER_ID
9971410000 D-166 GF 1
9910020000 H-12D 2
9873120000 K-19C 3
9811120000 J-200 4
9873120000 K-19C 5
9810320000 N-29B 6
9810390000 J-235 GF 7
9873500000 M-39 8
8447910000 J-62 GF 9
9873120000 K-19C 10
Nachdem die Daten in der ‚Temp‘ Tabelle eingefügt wird, ein Trigger einer Prozedur-Aufrufe in andere Tabellen einzufügen:
create or replace TRIGGER insert_customer
AFTER INSERT ON temp
FOR EACH ROW
BEGIN
insert_address(:new.phno, :new.addr, :new.ord_id);
END;
Das Verfahren lautet wie folgt:
create or replace procedure INSERT_ADDRESS(
p_cust_phone customer.cust_phone%type,
p_address address.address%type,
p_ord_id customer_order.order_id%type
)
is
l_cust_id customer.cust_id%type;
l_address_id address.address_id%type;
begin
begin
select cust_id
into l_cust_id
from customer c
where c.cust_phone=p_cust_phone;
exception
when no_data_found then
insert into customer
values (cust_id_seq.nextval, 'No Name', p_cust_phone)
returning cust_id into l_cust_id;
end;
select address_id
into l_address_id
from address a
where a.address=p_address;
exception
when no_data_found then
insert into address
values (address_id_seq.nextval, UPPER(p_address), UPPER(p_area))
returning address_id into l_address_id;
insert into customer_address
values (l_cust_id, l_address_id);
insert into customer_order (order_id, cust_id)
values (p_ord_id,l_cust_id);
end;
Die in die Tabelle CUSTOMER_ORDER eingefügten Daten sind nicht korrekt. Das Ergebnis, das ich auf der folgende Abfrage erhalten ist unten aufgeführt:
select * from customer_order;
ord_id cust_id
1 1
2 2
3 3
4 4
6 5
7 6
8 7
9 8
Order_id (5,10) verloren, da sie aus den gleichen Kunden wie ord_id = 3 kommen. Mehrere Bestellungen desselben Kunden werden nicht in der Tabelle customer_order hinzugefügt. Ich kann nicht verstehen, wo ich einen Fehler gemacht habe.
Ihr Verfahren ist richtig, aber es vermisst eine Sache. Wo fügen Sie Zeilen in die 'CUSTOMER_ADDRESS'-Tabelle ein, die die Junction-Tabelle zwischen' CUSTOMER 'und' ADDRESS 'ist. Die cust_id und die address_id sollen ebenfalls in die CUSTOMER_ADDRESS-Tabelle eingefügt werden, um sie zu verknüpfen –
Ich bin sicher, Sie kann sich meine Prozedur ansehen und herausfinden, wo Sie die zusätzliche Einfügung hinzufügen müssen – Boneist
Die Werte von 'l_cust_id' und 'l_address_id' werden zusammen benötigt, um die Einfügung auf der CUSTOMER_ADDRESS durchzuführen, da beide in verschiedenen Funktionen sind, wie verwende ich Das war das Problem, aufgrund dessen ich das gleiche Verfahren verwendet habe, um in alle Tabellen einzufügen.Ich bin relativ neu bei pl/sql. –