다음 작업이 가능합니까?PL/pgSQL 행 배열
의사 코드 :
function_name({key1:val1,key2:val2, key3:val3 [, ...] })
나는 "행의 모음"과 같은 매개 변수 뭔가, 내가 사전 같은 구조를 함수에 전달할 필요가 뜻을 취 PL/pgSQL의 작성 절차를 갖고 싶어
다음 작업이 가능합니까?PL/pgSQL 행 배열
의사 코드 :
function_name({key1:val1,key2:val2, key3:val3 [, ...] })
이 사이트를 방문하여 http://postgres.cz/wiki/PostgreSQL_SQL_Tricks을 검색하고 테이블에 배열을 검색하십시오. 최신 버전에는 다른 방법이있을 수 있지만 잠시 후 내 북마크에이 방법이 있습니다. 웹 사이트에서 출처 :
CREATE OR REPLACE FUNCTION unpack(anyarray)
RETURNS SETOF anyelement AS $$
SELECT $1[i]
FROM generate_series(array_lower($1,1),
array_upper($1,1)) g(i);
$$ LANGUAGE sql STRICT IMMUTABLE;
select unpack(array['a','b','c']);
는 당신이 복합 형과 배열 인수를 사용할 수 있다고 생각합니다. (안된)와 같은 뭔가 :이 배열에 같은 키와 다른 값으로 keyvalue
들과 keyvalue
의를 중복 추가 할 수
create type keyvalue as (
key text,
value text
);
create function function_name(keyvalue[]) returns null as $$
declare
keyvalue x;
begin
foreach x in array $1 loop
insert into tablename(key,value) values (x.key, x.value);
end loop
end;
$$ language plpgsql;
이, 진정한 사전되지 않습니다. 그러나 인수를 함수에 전달하기 만하면 충분합니다.
JustBob에 의해 언급 된 unpack()
을 사용하면 SQL-y가 아닌 루프를 사용하지 않고이 어레이를 집합으로 취급 할 수 있습니다.
현대의 PostgreSQL에서는 이러한 기능을 단순화 할 수 있습니다.
테스트 설정은 :
CREATE TABLE tbl1 (id int, value text);
(유형은 테이블 행 기반으로하는 경우)이 경우에 명시 적으로 형식을 만들 필요가 없습니다, 그것은 암시 적으로 모든 테이블에 생성됩니다.
기능 :
CREATE FUNCTION f_insert_rows_into_tbl1(tbl1[])
RETURNS VOID AS
$BODY$
INSERT INTO tbl1 (id,value)
SELECT (a).*
FROM (SELECT unnest($1) AS a) x;
$BODY$ LANGUAGE sql;
호출 : 행의 배열
SELECT f_insert_rows_into_tbl1('{"(1,foo)","(2,bar)"}');
주 입력 구!
답장을 보내드립니다. – biera