insert ignore into table1
select 'value1',value2
from table2
where table2.type = 'ok'
Quando eseguo questo viene visualizzato l'errore "mancante parola chiave INTO".oracolo inserito se non esiste una riga
Qualche idea?
insert ignore into table1
select 'value1',value2
from table2
where table2.type = 'ok'
Quando eseguo questo viene visualizzato l'errore "mancante parola chiave INTO".oracolo inserito se non esiste una riga
Qualche idea?
Perché IGNORE non è una parola chiave in Oracle. Questa è la sintassi MySQL.
Quello che puoi fare è usare MERGE.
merge into table1 t1
using (select 'value1' as value1 ,value2
from table2
where table2.type = 'ok') t2
on (t1.value1 = t2.value1)
when not matched then
insert values (t2.value1, t2.value2)
/
Da Oracle 10g è possibile utilizzare l'unione senza gestire entrambi i rami. In 9i abbiamo dovuto utilizzare un ramo MATCHED "fittizio".
Nelle versioni più antiche le uniche opzioni erano o:
Perché hai digitato la parola spuria "ignora" tra "inserisci" e "dentro" !!
insert ignore into table1 select 'value1',value2 from table2 where table2.type = 'ok'
dovrebbe essere:
insert into table1 select 'value1',value2 from table2 where table2.type = 'ok'
Dal titolo della domanda "inserto oracolo se fila non esiste" Suppongo si pensava "ignora" era una parola chiave di Oracle che significa "non cercare di inserire una riga se già esiste ". Forse funziona in qualche altro DBMS, ma non in Oracle. Si potrebbe utilizzare un'istruzione MERGE, o verificare l'esistenza in questo modo:
insert into table1
select 'value1',value2 from table2
where table2.type = 'ok'
and not exists (select null from table1
where col1 = 'value1'
and col2 = table2.value2
);
Si noti che se si ha la fortuna di lavorare con la versione 11g Release 2, è possibile utilizzare il suggerimento IGNORE_ROW_ON_DUPKEY_INDEX.
Dalla documentazione: http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/sql_elements006.htm#CHDEGDDG
Un esempio dal mio blog: http://rwijk.blogspot.com/2009/10/three-new-hints.html
saluti, Rob.