A função que você tem deveria ser:
CREATE FUNCTION insertdata(varchar(10),varchar(40))
RETURNS VOID AS
$$
INSERT INTO mahasiswa(col_name1, col_name2)
VALUES ($1,$2);
$$
LANGUAGE sql STRICT;
-
Não cite o nome do idioma. É um identificador.
-
Sempre forneça uma lista de destino com instruções persistentes. Caso contrário, se você alterar posteriormente a definição da tabela, a função poderá se comportar de maneiras inesperadas.
-
Nunca usechar(n)
, a menos que você saiba o que está fazendo. Eu usaria apenastext
.
Para inserir várias linhas , você pode pegar um array do tipo composto ou dois arrays com o mesmo número de elementos desaninhar em paralelo. Demonstrando este ú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;
Ligar:
SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');
Eu prefiro usar uma função plpgsql e verificar se o número de elementos é o mesmo em ambos os arrays para evitar erros. Use
array_length(arr1, 1)
... Postgres 9.4 ou posterior...
... introduziu uma nova variante de unnest que aceita vários arrays em paralelo - sem as peculiaridades do hack acima (nunca o padrão é um
CROSS JOIN
) INSERT INTO mahasiswa(col_name1, col_name2)
SELECT * FROM unnest(_arr1, _arr2); -- must be in FROM list