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íatext
.
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