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

Jak vložit data do tabulky pomocí uložených procedur v postgresql

PostgreSQL nepodporoval uložené procedury až do PG11. Předtím jste mohli získat stejný výsledek pomocí funkce. Například:

CREATE FUNCTION MyInsert(_sno integer, _eid integer, _sd date, _ed date, _sid integer, _status boolean)
  RETURNS void AS
  $BODY$
      BEGIN
        INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status)
        VALUES(_sno, _eid, _sd, _ed, _sid, _status);
      END;
  $BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;

Pak to můžete nazvat takto:

select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );

Hlavní omezení uložených funkcí Pg - ve srovnání se skutečnými uloženými procedurami - jsou:

  1. nemožnost vrátit více sad výsledků
  2. žádná podpora pro autonomní transakce (BEGIN, COMMIT a ROLLBACK v rámci funkce)
  3. žádná podpora pro syntaxi CALL standardu SQL, ačkoli ovladače ODBC a JDBC přeloží volání za vás.

Příklad

Počínaje PG11, CREATE PROCEDURE je zavedena syntaxe, která poskytuje podporu pro transakce.

CREATE PROCEDURE MyInsert(_sno integer, _eid integer, _sd date, _ed date, _sid integer, _status boolean)
LANGUAGE SQL
AS $BODY$
    INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status)
    VALUES(_sno, _eid, _sd, _ed, _sid, _status);   
$BODY$;

Což by se dalo volat pomocí:

CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );


  1. Škálování připojení v PostgreSQL pomocí sdružování připojení

  2. Jak funguje SQLite Ifnull()

  3. Žádná forma ukládání do mezipaměti databáze ke snížení duplicitních databázových dotazů.

  4. ORA-65139:Neshoda mezi souborem metadat XML a datovým souborem