Discussione:
Sintassi IF EXISTS
(troppo vecchio per rispondere)
Cosimo Piceno
2007-08-26 17:42:22 UTC
Permalink
è possibile controllare l'update o l'insert tramire la condizione IF EXISTS?
qualcosa del genere:

IF EXISTS (SELECT * FROM c2mag00 WHERE C2MAG = '001' AND C2ART =
'005001001')
(UPDATE c2mag00 SET C2GIA = (C2GIA - 1) WHERE C2MAG = '001' AND C2ART =
'005001001')
ELSE
(INSERT INTO c2mag00 ( C2MAG, C2ART, C2SMI, C2GIA ) VALUES ( '001',
'005001001', '0', '0'))

se è possibile, quale è la sintassi corretta?
Torakiki
2007-08-26 21:29:58 UTC
Permalink
Con quel DB?

Ad esempio in Oracle, in PL/SQL diventerebbe:

BEGIN

UPDATE c2mag00
SET C2GIA = (C2GIA - 1)
WHERE C2MAG = '001' AND C2ART = '005001001';

IF SQL%ROWCOUNT=0 THEN
INSERT INTO c2mag00 ( C2MAG, C2ART, C2SMI, C2GIA )
VALUES ( '001', '005001001', '0', '0');
END IF;

END;
--
Torakiki
Francesco Quaratino
2007-08-27 07:51:16 UTC
Permalink
Post by Cosimo Piceno
è possibile controllare l'update o l'insert tramire la condizione IF EXISTS?
IF EXISTS (SELECT * FROM c2mag00 WHERE C2MAG = '001' AND C2ART =
'005001001')
(UPDATE c2mag00 SET C2GIA = (C2GIA - 1) WHERE C2MAG = '001' AND C2ART =
'005001001')
ELSE
(INSERT INTO c2mag00 ( C2MAG, C2ART, C2SMI, C2GIA ) VALUES ( '001',
'005001001', '0', '0'))
se è possibile, quale è la sintassi corretta?
in MS-SQL Server ci sei andato molto vicino :)

IF EXISTS (SELECT * FROM c2mag00 WHERE C2MAG = '001' AND C2ART =
'005001001')

UPDATE c2mag00 SET C2GIA = (C2GIA - 1) WHERE C2MAG = '001' AND C2ART =
'005001001'

ELSE

INSERT INTO c2mag00 ( C2MAG, C2ART, C2SMI, C2GIA ) VALUES ( '001',
'005001001', '0', '0')
GO

in ogni caso sarebbe meglio NON usare la "SELECT *", quindi potresti
selezionare solo C2ART, C2MAG , così magari sfrutti un indice presente
sulla tabella.

se usi MySQL forse potrebbe convenire l'uso della clausola ON DUPLICATE
KEY UPDATE. Supponiamo che su (C2ART, C2MAG) sia definito un vincolo di
chiave primaria o unique, puoi ottenere lo stesso risultato con una
sola istruzione:

INSERT INTO
c2mag00 ( C2MAG, C2ART, C2SMI, C2GIA )
VALUES
( '001', '005001001', '0', '0')
ON DUPLICATE KEY UPDATE
C2GIA = (C2GIA - 1)
--
[Francesco Quaratino]
Loading...