2013-07-09 4 views
13
CREATE TABLE app_for_leave 
(
    sno integer NOT NULL, 
    eid integer, 
    ename varchar(20), 
    sd date, 
    ed date, 
    sid integer, 
    status boolean DEFAULT false, 
    CONSTRAINT pk_snoa PRIMARY KEY (sno) 
); 

Podstawowe wstawiania jest ::Jak wstawić dane do tabeli przy użyciu procedur przechowywanych w PostgreSQL

INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status) 
VALUES(1,101,'2013-04-04','2013-04-04',2,'f'); 

...

INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status) VALUES (?, ?, ?, ?, ?, ?); 

Moja Wymagania :: Jak wstawić dane do tabeli przy użyciu procedur przechowywanych?

+0

Potrzebuję wstawić dane, tworząc funkcję lub procedurę wstawiania danych do tabeli app_for_leave – 09Q71AO534

+0

Postgres nie ma procedur zapisanych w bazie, obsługuje funkcje chociaż .. –

+0

, więc nie ma innego sposobu wstawiania danych z wyjątkiem zapytań w języku DML instrukcji INSERT .. czy jest jakiś inny sposób na rozwiązanie tego @mike christensen – 09Q71AO534

Odpowiedz

22

PostgreSQL doesn't support stored procedures, per se, ale można uzyskać ten sam wynik za pomocą funkcji. Na przykład:

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; 

Następnie można nazwać tak:

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

Głównymi ograniczeniami na przechowywanych funkcji PG - w porównaniu do prawdziwych procedur składowanych - to:

  1. niemożność zwraca wiele zestawów wyników
  2. brak obsługi dla transakcji autonomicznych (BEGIN, COMMIT i ROLLBACK w ramach funkcji)
  3. Brak obsługi standardowej składni CALL języka SQL, chociaż sterowniki ODBC i JDBC będą tłumaczyć wywołania.

Example

+0

@ user2561626 - Najpierw należy "UTWORZYĆ" "FUNKCJĘ". Użyj powyższego przykładu, właśnie zweryfikuję go w Postgres 9.2 na moim własnym serwerze. –

+0

plpgsql nie obsługuje autonomicznych transakcji, ale inne języki, na przykład plperl. Prawdopodobnie możesz osiągnąć to samo używając dblink i plproxy. – bma

+0

@ user2561626 - [Example] (http://sqlfiddle.com/#!12/89188/2) –

2

PostgreSQL nie obsługuje procedur przechowywane, ale można uzyskać ten sam efekt przy użyciu funkcji.

Niezależnie od tego, jakie dane mają zostać wstawione do tabeli, są podawane jako parametry tworzonej funkcji.

utworzyć lub zamienić reprezentuje jeśli funkcja o tej samej nazwie (używasz) jest już obecny w bazie danych, a następnie zostanie ona zastąpiona albo jeśli brak funkcji o tej samej nazwie nie występuje wówczas nowa funkcja zostanie stworzony.

Musisz napisać zapytanie insesrtion wewnątrz treści funkcji.

CREATE OR REPLACE FUNCTION Insert_into_table(_sno INTEGER, _eid INTEGER, _ename VARCHAR(20), _sd DATE, _ed DATE, _sid INTEGER) 
     RETURNS void AS 
     $BODY$ 
      BEGIN 
      INSERT INTO app_for_leave(sno, eid, sd, ed, sid) 
      VALUES(_sno, _eid, _sd, _ed, _sid); 
      END; 
     $BODY$ 
     LANGUAGE 'plpgsql' VOLATILE 
     COST 100; 

Jak już wspomniano w tabeli wartość domyślną dla kolumnyStatusu, teraz to nie ma potrzeby, aby wstawić dane do tej kolumny

Oto SQLFiddle Link do zrozumienia