sql >> Database >  >> RDS >> PostgreSQL

Meerdere rijen invoegen met een functie in PostgreSQL

De functie die je hebt zou eerder moeten zijn:

CREATE FUNCTION insertdata(varchar(10),varchar(40)) 
  RETURNS VOID AS 
$$ 
   INSERT INTO mahasiswa(col_name1, col_name2)
   VALUES ($1,$2); 
$$ 
LANGUAGE sql STRICT;
  • Citeer de taalnaam niet. Het is een identificatie.

  • Geef altijd een doellijst met persistente verklaringen. Anders, als u later de tabeldefinitie wijzigt, kan de functie zich op onverwachte manieren gedragen.

  • Gebruik nooit char(n) , tenzij je weet wat je doet. Ik zou gewoon text gebruiken .

Om meerdere rijen in te voegen , kunt u een array van het samengestelde type nemen of twee arrays met hetzelfde aantal elementen parallel te ontlasten. Laatstgenoemde demonstreren:

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;

Bel:

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

Ik zou liever een plpgsql-functie gebruiken en controleren of het aantal elementen in beide arrays hetzelfde is om fouten te voorkomen. Gebruik array_length(arr1, 1) ...

Postgres 9.4 of hoger ...

... introduceerde een nieuwe variant van unnest die meerdere arrays tegelijk accepteert - zonder de eigenaardigheden van de bovenstaande hack (standaard nooit een CROSS JOIN )

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



  1. Geen gegevens meer om uit socketfout te lezen

  2. BOB Connect met een versleuteld wachtwoord?

  3. Scheid door komma's gescheiden mySql-databaseveldwaarde met php

  4. Vraag en aanbod matchen Uitdaging