it-swarm.com.de

Einfügen von Daten in eine Tabelle mit gespeicherten Prozeduren in postgresql

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)
);

Grundlegende Einfügung ist ::

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 (?, ?, ?, ?, ?, ?);

Meine Anforderung :: Wie füge ich Daten mit Stored Procedures in eine Tabelle ein?

19
09Q71AO534

PostgreSQL hat gespeicherte Prozeduren nicht unterstützt bis PG11. Zuvor konnten Sie mit einer Funktion das gleiche Ergebnis erzielen. Beispielsweise:

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;

Sie können es dann so nennen:

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

Die Hauptbeschränkungen der gespeicherten Funktionen von Pg im Vergleich zu echten gespeicherten Prozeduren sind:

  1. unfähigkeit, mehrere Ergebnismengen zurückzugeben
  2. keine Unterstützung für autonome Transaktionen (BEGIN, COMMIT und ROLLBACK innerhalb einer Funktion)
  3. keine Unterstützung für die SQL-Standard-CALL-Syntax, obwohl die ODBC und JDBC-Treiber Aufrufe für Sie übersetzen.

Beispiel

Ab PG11 wird der CREATE PROCEDURE Syntax ist eingeführt , die Unterstützung für Transaktionen bietet.

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$;

Welches könnte mit aufgerufen werden:

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

Ab PostgreSQL 11 können Sie gespeicherte Prozeduren erstellen und diese mit AUFRUFEN aufrufen:

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

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

Außerdem erlaubt es Transaktion abwickeln

Gespeicherte SQL-Prozeduren

PostgreSQL 11 führt gespeicherte SQL-Prozeduren ein, mit denen Benutzer eingebettete Transaktionen (dh BEGIN, COMMIT/ROLLBACK) innerhalb einer Prozedur verwenden können. Prozeduren können mit CREATE erstellt werden PROCEDURE-Befehl und ausgeführt mit dem CALL-Befehl.

7
Lukasz Szozda

PostgreSQL unterstützt keine gespeicherten Prozeduren , Sie können jedoch mit einer Funktion dasselbe Ergebnis erzielen.

Alle Daten, die Sie in die Tabelle einfügen möchten, werden als Parameter für die von Ihnen erstellte Funktion angegeben.

CREATE OR REPLACE stellt dar, ob eine gleichnamige Funktion (die Sie verwenden) bereits in der Datenbank vorhanden ist. dann wird es ersetzt oder wenn keine Funktion mit dem gleichen Namen vorhanden ist, wird eine neue Funktion erstellt.

Sie müssen die insesrtion-Abfrage in den Funktionskörper schreiben.

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;

Wie Sie bereits in der Tabelle erwähnt haben, ist ein Standardwert für die Spalte Status, jetzt ist es nicht nötig Daten in diese Spalte einzufügen

Hier ist der SQLFiddle Link für Ihr Verständnis

2
09Q71A0548
CREATE OR REPLACE FUNCTION  new_bolshek(parent_id bigint, _key text, _value text, enabled boolean)
  RETURNS SETOF bolshekter AS
  $BODY$
  DECLARE
    new_id integer;
    returnrec bolshekter;
  BEGIN
        INSERT INTO bolshekter(parent_id, content_key, content_value, enabled)
        VALUES(parent_id, _key, _value, enabled) RETURNING id INTO new_id;
        FOR returnrec IN SELECT * FROM bolshekter where id=new_id LOOP
            RETURN NEXT returnrec;
        END LOOP;
  END;
  $BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
1
Yerbol