PDA

View Full Version : [SQL] IF e Firebird


Jabberwock
24-06-2013, 09:31
Ho un problema con Firebird che non mi riesce di risolvere: premetto che e' la prima esperienza di programmazione con SQL, quindi puo' anche essere una stupidagine, ma non riesco a capire l'errore!

Dunque, ho una tabella (tab1) con 3 colonne (quantita, codice, descrizione); In questa tabella devo inserire i dati nei campo codice e descrizione, mentre quantita ha il valore predefinito impostato ad 1. Finche' faccio un

insert into tab1 (CODICE, DESCRIZIONE, ) SELECT CODICE, DESCRIZIONE, from tab2 where CODICE = 'int_codice_da_inserire';

o passo i valori con values funziona tranquillamente; ho pero' bisogno di definire alcune condizioni, ovvero, il caso piu' semplice, se il codice e' gia' presente in tab1, deve essere incrementato il valore in quantita!

Il codice che ho scritto e':
EXECUTE BLOCK as begin
if (exists(select codice from tab1 where codice = 'int_codice_da_inserire')) then
execute statement 'update tab1 set quantita=quantita+1 where codice = "int_codice_da_inserire";'
else
execute statement 'insert into tab1 (CODICE, DESCRIZIONE) SELECT CODICE, DESCRIZIONE, from tab2 where CODICE = 'int_codice_da_inserire';';
end

Gli errori mi vengono dati su else ed end:
SQL Message : -104
Invalid token

Engine Code : 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Token unknown - line 5, column 1
else

Ovviamente i comandi in execute statement, presi singolarmente, funzionano... :muro:

wingman87
24-06-2013, 12:57
Forse č per via del ; che manca alla fine del primo execute

Jabberwock
24-06-2013, 16:46
Forse č per via del ; che manca alla fine del primo execute

Mettendo ; alla fine del primo execute e togliendo gli apici a int_codice_da_inserire (e' un bigint), il codice viene eseguito... ma solo su FlameRobin, mentre in NetBeans (usando i driver di Jaybird) e IB QUery (altro software consigliato per la gestione), continua a non funzionare!
In realta', dire che funziona su FlameRobin e' una affermazione grossa: non ci sono errori nel log, ma la tabella rimane senza alcuna modifica:

Executing statement...
Statement executed (elapsed time: 0.000s).
25 fetches, 1 marks, 0 reads, 0 writes.
0 inserts, 1 updates, 0 deletes, 0 index, 4 seq.
Delta memory: 0 bytes.
tav1: 1 updates.
0 rows affected directly.
Total execution time: 0.000s
Script execution finished.

british
26-06-2013, 20:49
Mettendo ; alla fine del primo execute e togliendo gli apici a int_codice_da_inserire (e' un bigint), il codice viene eseguito... ma solo su FlameRobin, mentre in NetBeans (usando i driver di Jaybird) e IB QUery (altro software consigliato per la gestione), continua a non funzionare!

Mi sembra un problema di terminatore di linea (il punto e virgola), dovresti provare con un client minimale tipo isql-fb , prima perņ guarda questa pagina
http://www.firebirdsql.org/refdocs/langrefupd20-execblock.html la prima nota in fondo.