PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So fügen Sie mehrere Zeilen mit einer Funktion in PostgreSQL ein

Die Funktion, die Sie haben sollte eher sein:

CREATE FUNCTION insertdata(varchar(10),varchar(40)) 
  RETURNS VOID AS 
$$ 
   INSERT INTO mahasiswa(col_name1, col_name2)
   VALUES ($1,$2); 
$$ 
LANGUAGE sql STRICT;
  • Zitieren Sie nicht den Namen der Sprache. Es ist eine Kennung.

  • Geben Sie immer eine Zielliste mit persistenten Anweisungen an. Andernfalls kann sich die Funktion unerwartet verhalten, wenn Sie später die Tabellendefinition ändern.

  • Verwenden Sie niemals char(n) , es sei denn, Sie wissen, was Sie tun. Ich würde einfach text verwenden .

Um mehrere Zeilen einzufügen , können Sie ein Array vom zusammengesetzten Typ oder zwei Arrays mit derselben Anzahl von Elementen nehmen parallel zu entschachteln. Letzteres demonstrieren:

CREATE FUNCTION insertdata(_arr1 text[], _arr2 text[]) 
  RETURNS VOID AS 
$$ 
   INSERT INTO mahasiswa(col_name1, col_name2)
   SELECT unnest(_arr1), unnest(_arr2);
$$ 
LANGUAGE sql STRICT;

Aufruf:

SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');

Ich würde lieber eine plpgsql-Funktion verwenden und prüfen, ob die Anzahl der Elemente in beiden Arrays gleich ist, um Fehler zu vermeiden. Verwenden Sie array_length(arr1, 1) ...

Postgres 9.4 oder höher ...

... eine neue Variante von Unnest eingeführt, die mehrere Arrays parallel akzeptiert - ohne die Macken des obigen Hacks (nie standardmäßig ein CROSS JOIN )

   INSERT INTO mahasiswa(col_name1, col_name2)
   SELECT * FROM unnest(_arr1, _arr2);  -- must be in FROM list