Tengo una serie de tablas de valores de código que contienen un código y una descripción con una Identificación larga.Oracle Insertar a través de Seleccionar de varias tablas donde una tabla puede no tener una fila
ahora quiero crear una entrada para un tipo de cuenta que hace referencia a una serie de códigos, así que tener algo como esto:
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 = ?)
Esto recupera los valores apropiados de las tablas tax_status y destinatario si es un partido se encuentra para sus respectivos códigos. Desafortunadamente, recipient_code es anulable, y por lo tanto el? el valor de sustitución podría ser nulo. Por supuesto, la combinación implícita no devuelve una fila, por lo que una fila no se inserta en mi tabla.
He intentado usar NVL en? y en el r.recipient_id.
He intentado forzar una combinación externa en r.recipient_code =? agregando (+), pero no es una unión explícita, por lo que Oracle aún no agregó otra fila.
¿Alguien sabe de una manera de hacer esto?
Obviamente puedo modificar la declaración para que haga la búsqueda del recipient_id externamente, y tengo un? en lugar de r.recipient_id, y no seleccione nada de la tabla de destinatarios, pero preferiría hacer todo esto en 1 declaración de SQL.
no Will esto tiene un problema es que hay múltiples entradas en tax_status o en el destinatario y lo que ocurre con NULL recip ient_code? –
Acabo de probarlo, y el código de destinatario nulo da como resultado nulo para la columna recipient_id en account_type_standard. No sé sobre entradas múltiples, pero en mi caso, las tablas tienen códigos únicos, así que estoy bien. – Mikezx6r
Según Tony Andrews, no es necesario seleccionar de DUAL para el valor de secuencia. Puede simplemente tener account_type_standard_seq.nextval. – Mikezx6r