From: | Ronan Dunklau <rdunklau(at)gmail(dot)com> |
---|---|
To: | "F(dot) BROUARD / SQLpro" <sqlpro(at)club-internet(dot)fr> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Migration SQL Serveur 2008 vers PostgreSQL |
Date: | 2012-01-05 09:40:08 |
Message-ID: | 4F056FF8.9070704@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
> Voici un exemple de transactions infaisable sous PG :
>
> CREATE TABLE T1 (C1 INT); CREATE TABLE T2 (C2 INT CHECK (C2 > 0))
> CREATE TABLE T3 (C3 INT); GO
>
> CREATE PROCEDURE P_INSERT_TRANSACTION @VAL1 INT AS BEGIN --
> demarrage d'une transaction BEGIN TRANSACTION; -- test de validité
> BEGIN TRY INSERT INTO T1 VALUES (@VAL1); INSERT INTO T2 VALUES
> (@VAL1); COMMIT TRANSACTION; END TRY -- en cas d'erreur BEGIN CATCH
> IF XACT_STATE() <> 0 ROLLBACK TRANSACTION; INSERT INTO T3 VALUES
> (@VAL1); END CATCH END; GO
>
> -- permier test réussi : EXECUTE P_INSERT_TRANSACTION 1; GO
>
> -- resultats : SELECT * FROM T1; SELECT * FROM T2; SELECT * FROM
> T3;
>
> C1 ----------- 1
>
> C2 ----------- 1
>
> C3 -----------
>
> -- second test échec : EXECUTE P_INSERT_TRANSACTION -1 GO
>
> -- resultats : SELECT * FROM T1; SELECT * FROM T2; SELECT * FROM
> T3;
>
>
> C1 -----------
>
> C2 -----------
>
> C3 ----------- -1
>
> La procédure insère dans les tables T1 et T2 dans la cadre d'une
> transaction et, en cas de viol de la contrainte CHECK, annule la
> transaction et insère dans la table T3...
Pour ce point précis, il me semble que la procédure suivante remplit
le même office, à moins que je n'aie raté un point ?
create or replace function p_insert_transaction(val1 integer) returns
void as $$
BEGIN
BEGIN
insert into t2 values (val1);
insert into t1 values (val1);
EXCEPTION WHEN INTEGRITY_CONSTRAINT_VIOLATION THEN
insert into t3 values(val1);
END;
END;
$$ language 'plpgsql';
La documentation précise que lorsqu'une erreur survient dans un tel
bloc, toute modification de l'état de la base de donnée est annulée.
- --
Ronan Dunklau
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.18 (GNU/Linux)
iQEcBAEBAgAGBQJPBW/qAAoJECTYLCgFy323BpYH/1kcrkeuwS+JICU97nlwAOo/
dPiVrEDhjaRUb6bf41CdcJuLe/AXDGjZDYh0oDfsI8na8hDTmVfVzVlT0WTF7ole
sXw2FPLqxLaCHj2qUs9IWvX6B/nFLUuxkYgwg97BD2DhXCTDXzF65wsEu3bb2zar
ZTYpsYpBgdAuod4W1pWWZaPnboqFwc8icphR/Ffn+khgzLaBGfZdYu1dU3Vww7oi
yJwqovXbatshiJ1OxL35uLbyojiSXD44IeyXcpAk1i8mhHFsTDpqXyA/NK+a3YQV
tUj5jBo5RCnmmJLQxBTCiYDo9B6iLGXDb87H25aPuz3b1SQHnP0Jnu056Cs3qnw=
=fyQK
-----END PGP SIGNATURE-----
From | Date | Subject | |
---|---|---|---|
Next Message | Dimitri Fontaine | 2012-01-05 10:00:43 | Re: Migration SQL Serveur 2008 vers PostgreSQL |
Previous Message | F. BROUARD / SQLpro | 2012-01-05 08:59:52 | Re: Migration SQL Serveur 2008 vers PostgreSQL |