sql >> Base de Datos >  >> RDS >> Oracle

Oracle Insertar a través de Seleccionar de varias tablas donde una tabla puede no tener una fila

Las uniones externas no funcionan "como se esperaba" en ese caso porque le ha dicho explícitamente a Oracle que solo quiere datos si ese criterio en esa tabla coincide. En ese escenario, la unión externa se vuelve inútil.

Una solución

INSERT INTO account_type_standard 
  (account_type_Standard_id, tax_status_id, recipient_id) 
VALUES( 
  (SELECT account_type_standard_seq.nextval FROM DUAL),
  (SELECT tax_status_id FROM tax_status WHERE tax_status_code = ?), 
  (SELECT recipient_id FROM recipient WHERE recipient_code = ?)
)

[Editar] Si espera varias filas de una subselección, puede agregar ROWNUM =1 a cada cláusula where O usar un agregado como MAX o MIN. Esto, por supuesto, puede no ser la mejor solución para todos los casos.

[Editar] Por comentario,

  (SELECT account_type_standard_seq.nextval FROM DUAL),

puede ser solo

  account_type_standard_seq.nextval,