sql >> Databáze >  >> RDS >> PostgreSQL

Vnořené transakce v postgresql 8.2?

Máte možnost používat vnořené transakce uvnitř postgresql pomocí SavePoints.

Vezměte si tento příklad kódu:

CREATE TABLE t1 (a integer PRIMARY KEY);

CREATE FUNCTION test_exception() RETURNS boolean LANGUAGE plpgsql AS
$$BEGIN
   INSERT INTO t1 (a) VALUES (1);
   INSERT INTO t1 (a) VALUES (2);
   INSERT INTO t1 (a) VALUES (1);
   INSERT INTO t1 (a) VALUES (3);
   RETURN TRUE;
EXCEPTION
   WHEN integrity_constraint_violation THEN
      RAISE NOTICE 'Rollback to savepoint';
      RETURN FALSE;
END;$$;

BEGIN;

SELECT test_exception();
NOTICE:  Rollback to savepoint
 test_exception 
----------------
 f
(1 row)

COMMIT;

SELECT count(*) FROM t1;
 count 
-------
     0
(1 row)

Možná vám to trochu pomůže.



  1. Jak zkombinovat výsledky dvou dotazů v SQL

  2. Sekvence Oracle PL/SQL se nezvyšuje podle očekávání s konstruktory objektů

  3. Obnovit počet ID po odstranění tabulky ()

  4. Jak získám Oracle SCHEMA jako skripty DDL s DBMS_METADATA (a SCHEMA_EXPORT)