2013-07-09 1 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) 
); 

inserimento di base è ::Come inserire i dati nella tabella utilizzando le stored procedure in 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 (?, ?, ?, ?, ?, ?); 

mia esigenza :: Come inserire dati in una tabella utilizzando le stored procedure ?

+0

Ho bisogno di inserire dati, creando una funzione o una procedura per inserire dati nella tabella app_for_leave – 09Q71AO534

+0

Postgres non ha stored procedure, ma supporta le funzioni anche se .. –

+0

quindi non c'è altro modo per inserire dati eccetto le domande di linguaggio DML INSERT statement..or c'è un altro modo per risolvere questo @mike christensen – 09Q71AO534

risposta

22

PostgreSQL doesn't support stored procedures, di per sé, ma è possibile ottenere lo stesso risultato utilizzando una funzione. Per esempio:

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; 

si può poi lo chiamano in questo modo:

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

Le principali limitazioni sulle funzioni memorizzate di Pg - rispetto ai veri stored procedure - sono:

  1. incapacità di restituire più set di risultati
  2. nessun supporto per le transazioni autonome (BEGIN, COMMIT e ROLLBACK all'interno di una funzione)
  3. non supporta la sintassi CALL standard SQL, sebbene i driver ODBC e JDBC traducano le chiamate.

Example

+0

@ user2561626 - È necessario 'CREARE' per prima la' FUNZIONE '. Usa il mio esempio sopra, l'ho appena verificato con Postgres 9.2 sul mio server. –

+0

plpgsql non supporta le transazioni autonome, ma altri linguaggi, per esempio plperl. Probabilmente puoi ottenere lo stesso risultato usando dblink e plproxy. – bma

+0

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

2

PostgreSQL non supporta stored procedure, ma è possibile ottenere lo stesso risultato utilizzando una funzione.

Qualsiasi siano i dati che si desidera inserire nella tabella vengono forniti come parametri per la funzione che si sta creando.

CREATE OR REPLACE rappresenta se una funzione con lo stesso nome (in uso) è già presente nel database, allora sarà sostituito o altro, se nessuna funzione con lo stesso nome non è presente quindi una nuova funzione sarà creato.

È necessario scrivere la query di insemerazione all'interno del corpo della funzione.

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; 

Come si è già accennato nella tabella un valore predefinito per la colonnaStato, Ora non è necessario inserire i dati in quella colonna

Ecco l'SQLFiddle Link per la comprensione