An array of a composite type for entering a stored procedure

I create a stored procedure using plpgsql, passing an array of types and looping inside the procedure so that I can insert each type of information

CREATE TYPE info AS(
    name  varchar,
    email_add  varchar,
    contact_no  varchar 
);

CREATE OR REPLACE FUNCTION insert_info(
    info_array  info[]
) RETURNS varchar AS $$
    DECLARE
        info_element  info;
    BEGIN
        FOREACH info_element IN ARRAY info_array
        LOOP
            INSERT INTO info_table(
                name,
                email_add,
                contact_no
            ) VALUES(
                info_element.name,
                info_element.email_add,
                info_element.contact_no
            );
        END LOOP;
        RETURN 'OK';
    END;
$$ LANGUAGE plpgsql;

The problem is that I do not know how to use the function with array input. I did some experiments (only with some stupid inputs):

SELECT insert_info(
    ARRAY[('Arjay','myEmail@email.com','1234567')]
);

But PostgreSQL says this record[], and I still haven't tested the Loop part ...

I found a similar problem in this link:
Declare a compound type variable in PostgreSQL using% TYPE
but it did not use arrays. If this is just a duplicate question, maybe you guys can point me in the right direction!

+4
1

:

SELECT insert_info('{"(Arjay,myEmail@email.com,1234567)"}'::info[]);

ARRAY:

SELECT insert_info((ARRAY['(Arjay,myEmail@email.com,1234567)'
                         ,'(Bjay,my2Email@email.com,2234567)'])::info[]);

:

SELECT insert_info( ARRAY['(Arjay,myEmail@email.com,1234567)'::info
                         ,'(Bjay,my2Email@email.com,2234567)']);

SQL unnest():

INSERT INTO info(name, email_add,contact_no)
SELECT * FROM unnest('{"(Arjay,myEmail@email.com,1234567)"
                     , "(Bjay,my2Email@email.com,2234567)"}'::info[]);

SQL, ...

CREATE OR REPLACE FUNCTION insert_info(info_array info[])
  RETURNS void AS
$func$
INSERT INTO info(name, email_add,contact_no)
SELECT * FROM unnest($1)
$func$ LANGUAGE sql;

.

, btw.

+7

All Articles