sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man infogar flera rader med en funktion i PostgreSQL

funktionen du har borde snarare vara:

CREATE FUNCTION insertdata(varchar(10),varchar(40)) 
  RETURNS VOID AS 
$$ 
   INSERT INTO mahasiswa(col_name1, col_name2)
   VALUES ($1,$2); 
$$ 
LANGUAGE sql STRICT;
  • Citera inte språknamnet. Det är en identifierare.

  • Tillhandahåll alltid en mållista med fasta påståenden. Annars, om du senare ändrar tabelldefinitionen, kan funktionen bete sig på oväntade sätt.

  • Använd aldrig char(n) , om du inte vet vad du gör. Jag skulle bara använda text .

För att infoga flera rader , kan du ta en array av sammansatt typ eller två arrayer med samma antal element att odla parallellt. Visar det senare:

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;

Ring:

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

Jag skulle hellre använda en plpgsql-funktion och kontrollera att antalet element är detsamma i båda arrayerna för att förhindra misstag. Använd array_length(arr1, 1) ...

Postgres 9.4 eller senare ...

... introducerade en ny variant av unnest som accepterar flera arrayer parallellt - utan egenskaperna hos ovanstående hack (använder aldrig en CROSS JOIN som standard )

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



  1. Hur kan jag skicka någon http-förfrågan från postgresql-funktion eller trigger

  2. Övervakning av Percona Server för MySQL - nyckelmått

  3. Visa kolumner för innevarande år och föregående år i oracle

  4. Hur exporterar man data från SQL Server 2008.2010 i DML (SQL-skript)?