2017-04-10 2 views
0

부모 레코드 및 하위 레코드를 추가하는 함수를 작성하고 있습니다.PostgreSQL : 부모 및 자식 레코드를 추가하는 함수

필자가 알고있는 한, 적절한 데이터 유형을 만들어야하는데,이를 단순화했습니다.

create type parenttype as (
    data varchar   -- data 
); 

create type childtype as (
    parent integer,   -- foreign key 
    details varchar   -- data 
); 

이 항목은 아무 것도 추가하지 않는 숫자 입력란을 생략하고 단순화 된 버전입니다. 그러나 둘 다 생성 될 기본 키를 생략합니다.

나는 함수가 다음과 같은 형태를 취할 것이라고 생각 : 거기 도착하면

function adddata(parentdata parenttype, childdata childtype[]) 
-- etc 
-- LANGUAGE plpgsql 

나는 내부의 데이터로 무엇을 어떻게 해야할지 생각 .

질문은 함수를 호출하기 전에 데이터를 설정하는 방법입니다. 즉, parenttype 및 배열 childtype에 대한 값을 설정하는 방법은 무엇입니까?

관련 질문에 MS SQL Server를 요청했지만 다른 방법이 필요하다는 것을 알고 있습니다.

답변

0

해당 함수를 호출하는 위치와이 데이터의 출처에 따라 다릅니다.

예 1

SELECT * FROM adddata(
     row('somedata')::parenttype, 
     array[row(1::integer,'somedata'), row(2::integer,'somedata22')]::childtype[] 
); 

예 2

SELECT adddata(
     row(parent.column)::parenttype, 
     array_agg(row(child.parent_id,child.column)::childtype) 
     ) 
FROM parent 
JOIN child ON child.parent_id = parent.id 
GROUP BY parent.column; 
+0

당신이 명확히 수'array_agg'? 그런 식으로 2 줄을 추가 할 수 있을까요? 또한 두 번째 예제에서'SELECT' 절 다음에 추가 조항이 실제로 필요합니까? – Manngo

+0

'array_agg'는 매개 변수로 전달하는 요소의 배열을 반환합니다. 이 경우 하위 유형의 행 배열이됩니다. 추가 조항은 무엇을 의미합니까? 두 번째 예는 테이블의 데이터에서 함수에 대한 매개 변수를 작성하는 것입니다. –

관련 문제