sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan indsætter du flere rækker ved hjælp af en funktion i PostgreSQL

Den funktion du har burde hellere være:

CREATE FUNCTION insertdata(varchar(10),varchar(40)) 
  RETURNS VOID AS 
$$ 
   INSERT INTO mahasiswa(col_name1, col_name2)
   VALUES ($1,$2); 
$$ 
LANGUAGE sql STRICT;
 
  • Angiv ikke sprogets navn. Det er en identifikator.

  • Giv altid en målliste med vedvarende udsagn. Ellers, hvis du senere ændrer tabeldefinitionen, kan funktionen opføre sig på uventede måder.

  • Brug aldrig char(n) , medmindre du ved, hvad du laver. Jeg ville bare bruge text .

For at indsætte flere rækker , kan du tage et array af sammensat type eller to arrays med det samme antal elementer at unneste parallelt. Demonstrerer sidstnævnte:

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 til:

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

Jeg vil hellere bruge en plpgsql-funktion og kontrollere, at antallet af elementer er det samme i begge arrays for at forhindre fejl. Brug array_length(arr1, 1) ...

Postgres 9.4 eller nyere ...

... introducerede en ny variant af unnest, der accepterer flere arrays parallelt - uden ejendommelighederne ved ovenstående hack (standarder aldrig en CROSS JOIN )

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


  1. Oracle:Dynamisk forespørgsel med IN-klausul ved hjælp af markør

  2. MySQL:betingelse på resultatet af GROUP_CONCAT?

  3. Opdelt kommasepareret streng --> FUNKTION db.CHARINDEX eksisterer ikke

  4. Fejl:ugyldig inputsyntaks for heltal: