arrays – 作为存储过程输入的复合类型的数组
发布时间:2020-12-13 18:07:46 所属栏目:百科 来源:网络整理
导读:我正在使用plpgsql创建一个存储过程,通过传递一个类型数组并在过程中执行循环,以便我可以插入每个信息类型 CREATE TYPE info AS( name varchar,email_add varchar,contact_no varchar );CREATE OR REPLACE FUNCTION insert_info( info_array info[]) RETURNS
我正在使用plpgsql创建一个存储过程,通过传递一个类型数组并在过程中执行循环,以便我可以插入每个信息类型
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; 问题是我不知道如何使用数组输入的函数.我做了一些实验(只有一些愚蠢的输入): SELECT insert_info( ARRAY[('Arjay','myEmail@email.com','1234567')] ); 但是PostgreSQL说这是一个记录[]而我还没有测试过Loop部分…… 我在这个链接中发现了类似的问题:
电话会是:
SELECT insert_info('{"(Arjay,myEmail@email.com,1234567)"}'::info[]); 或者使用ARRAY构造函数: SELECT insert_info((ARRAY['(Arjay,1234567)','(Bjay,my2Email@email.com,2234567)'])::info[]); 要么: SELECT insert_info( ARRAY['(Arjay,1234567)'::info,2234567)']); 但使用 INSERT INTO info(name,contact_no) SELECT * FROM unnest('{"(Arjay,1234567)","(Bjay,2234567)"}'::info[]); 如果你需要它作为函数调用,你可以将它包装成一个SQL函数… CREATE OR REPLACE FUNCTION insert_info(info_array info[]) RETURNS void AS $func$ INSERT INTO info(name,contact_no) SELECT * FROM unnest($1) $func$LANGUAGE sql; 同样的电话. 您的原始函数将在第一个数组元素btw之后返回. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |