Mam wiele tabel wartości kodów, które zawierają kod i opis o długim identyfikatorze.Oracle Insert via Wybierz z wielu tabel, w których jedna tabela może nie mieć wiersza
teraz chcę utworzyć wpis na typ konta, które odwołuje się do liczby kodów, więc mam coś takiego:
insert into account_type_standard (account_type_Standard_id,
tax_status_id, recipient_id)
(select account_type_standard_seq.nextval,
ts.tax_status_id, r.recipient_id
from tax_status ts, recipient r
where ts.tax_status_code = ?
and r.recipient_code = ?)
ten pobiera odpowiednie wartości z tax_status i biorcy tabelach Jeśli mecz znajduje się dla ich odpowiednich kodów. Niestety, kod_odbiorcy jest zerowy, a zatem? wartość podstawienia może być pusta. Oczywiście niejawne join nie zwraca wiersza, więc wiersz nie zostanie wstawiony do mojego stołu.
Próbowałem używać NVL na? i na r.recipient_id.
Próbowałem wymusić sprzężenie zewnętrzne na r.recipient_code =? przez dodanie (+), ale nie jest to jawne sprzężenie, więc Oracle nadal nie dodaje kolejnego wiersza.
Ktoś wie, jak to zrobić?
Mogę oczywiście zmodyfikować oświadczenie, tak że sprawdzam adres odbiorcy zewnętrznie i mam? zamiast r.recipient_id i wcale nie wybieram z tabeli odbiorcy, ale wolałbym zrobić to wszystko w 1 instrukcji SQL.
nie Will to jest problem, jest wiele wpisów w statusie podatkowym lub odbiorcy i co dzieje się z NULL recip ient_code? –
Po prostu wypróbowałem, a zerowy kod odbiorcy daje null dla kolumny recipient_id na account_type_standard. Nie wiem o wielu wpisach, ale w moim przypadku tabele mają unikalne kody, więc wszystko jest w porządku. – Mikezx6r
Jak na Tony'ego Andrewsa, nie trzeba wybierać z DUAL dla wartości sekwencji. Może po prostu mieć account_type_standard_seq.nextval. – Mikezx6r