Puoi farlo in una dichiarazione sql per i clienti esistenti, 3 dichiarazioni per quelli nuovi. Tutto quello che devi fare è essere ottimista e comportarti come se il cliente esistesse già:
insert into "order" (customer_id, price) values \
((select customer_id from customer where name = 'John'), 12.34);
Se il cliente non esiste, otterrai un'eccezione sql il cui testo sarà qualcosa del tipo:
null value in column "customer_id" violates not-null constraint
(a condizione che tu abbia reso customer_id non annullabile, cosa che sono sicuro che tu l'abbia fatto). Quando si verifica tale eccezione, inserisci il cliente nella tabella dei clienti e ripeti l'inserimento nella tabella degli ordini:
insert into customer(name) values ('John');
insert into "order" (customer_id, price) values \
((select customer_id from customer where name = 'John'), 12.34);
A meno che la tua attività non cresca a un ritmo tale da rendere "dove mettere tutti i soldi" il tuo unico vero problema, la maggior parte dei tuoi inserti sarà per i clienti esistenti. Quindi, la maggior parte delle volte, l'eccezione non si verificherà e avrai finito in un'unica dichiarazione.