PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak wstawić wiele wierszy za pomocą funkcji w PostgreSQL

funkcja, którą masz powinien być raczej:

CREATE FUNCTION insertdata(varchar(10),varchar(40)) 
  RETURNS VOID AS 
$$ 
   INSERT INTO mahasiswa(col_name1, col_name2)
   VALUES ($1,$2); 
$$ 
LANGUAGE sql STRICT;
  • Nie cytuj nazwy języka. To identyfikator.

  • Zawsze dostarczaj listę docelową z utrwalonymi instrukcjami. W przeciwnym razie, jeśli później zmienisz definicję tabeli, funkcja może zachowywać się w nieoczekiwany sposób.

  • Nigdy nie używaj char(n) , chyba że wiesz, co robisz. Po prostu użyłbym text .

Aby wstawić wiele wierszy , możesz wziąć tablicę typu złożonego lub dwie tablice o tej samej liczbie elementów rozpakować równolegle. Demonstracja tego ostatniego:

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;

Zadzwoń:

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

Wolałbym użyć funkcji plpgsql i sprawdzić, czy liczba elementów jest taka sama w obu tablicach, aby uniknąć błędów. Użyj array_length(arr1, 1) ...

Postgres 9.4 lub nowszy...

... wprowadzono nowy wariant unnest, który akceptuje wiele tablic równolegle - bez dziwactwa powyższego hacka (nigdy domyślnie CROSS JOIN )

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Coalesces jsonArrayAgg do pustej tablicy w jOOQ

  2. Dlaczego Solr jest o wiele szybszy niż Postgres?

  3. Jak przechowywać daty o różnym stopniu dokładności w postgresie?

  4. Dwóch właścicieli tej samej bazy danych PostgreSQL

  5. lastInsertId nie działa w Postgresql