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:
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: