Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle Insert via Select from multiple tables onde uma tabela pode não ter uma linha


As junções externas não funcionam "como esperado" nesse caso porque você disse explicitamente ao Oracle que deseja apenas dados se os critérios dessa tabela corresponderem. Nesse cenário, a junção externa se torna inútil.

Uma solução alternativa
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 = ?)
)

[Edit]Se você espera várias linhas de uma subseleção, pode adicionar ROWNUM=1 a cada cláusula where OU usar um agregado como MAX ou MIN. Isso, obviamente, pode não ser a melhor solução para todos os casos.

[Editar] Por comentário,
  (SELECT account_type_standard_seq.nextval FROM DUAL),

pode ser apenas
  account_type_standard_seq.nextval,