sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo insertar varias filas usando una función en PostgreSQL

La función que tienes debería ser más bien:

CREATE FUNCTION insertdata(varchar(10),varchar(40)) 
  RETURNS VOID AS 
$$ 
   INSERT INTO mahasiswa(col_name1, col_name2)
   VALUES ($1,$2); 
$$ 
LANGUAGE sql STRICT;
  • No cite el nombre del idioma. Es un identificador.

  • Proporcione siempre una lista de objetivos con declaraciones persistentes. De lo contrario, si luego cambia la definición de la tabla, la función puede comportarse de manera inesperada.

  • Nunca use char(n) , a menos que sepa lo que está haciendo. Solo usaría text .

Para insertar varias filas , puede tomar una matriz de tipo compuesto o dos matrices con el mismo número de elementos de anidar en paralelo. Demostrando esto último:

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;

Llamar:

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

Preferiría usar una función plpgsql y verificar que la cantidad de elementos sea la misma en ambas matrices para evitar errores. Usa array_length(arr1, 1) ...

Postgres 9.4 o posterior...

... introdujo una nueva variante de unnest que acepta múltiples matrices en paralelo, sin las peculiaridades del truco anterior (nunca se establece de forma predeterminada en CROSS JOIN )

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