2012-07-20 2 views
1

동적으로 열 이름을 설정하고자하는 이중 중첩 FOR 루프가있는 Postgresql PL/pgSQL 함수가 있습니다. 그러나 프로그래밍 방식으로 레코드 열을 액세스하는 방법을 찾을 수 없습니다.PL/pgSQL RECORD 열의 동적 변경 값

나는 몇 가지 코드 예제로 바로 건너 뛸 수 있습니다 :

FOR loop_helper1 IN SELECT 
    id, name1, name2, name3, nameN, 
    FROM table1 
    LOOP 
    FOR loop_helper2 IN SELECT name FROM table2 LOOP 
     -- I want to set values of columns in loop_helper1, 
     -- with the column name given by loop_helper2.name 
     -- An EXECUTE would not allow me to do this: 
     EXECUTE 'loop_helper1.' || loop_helper2.name || ':= function_call(123);' 
     -- (Eg. 'loop_helper1.name2 := function_call(123);') 
     -- However, this produces: ERROR: syntax error at or near "loop_helper1" 
    END LOOP; 
END LOOP; 

어떤 아이디어?

확실히이 방법을 사용해야합니다.하지만 찾을 수없는 것 같습니다. 모든 도움과 제안을 부탁드립니다. 감사.

답변

1

아마 우리가 this related question에서 고안 한 기능을 원한다고 생각합니다. 이 기능을
, 당신의 코드는 다음과 같습니다


FOR loop_helper1 IN 
    SELECT id, name1, name2, name3, nameN, 
    FROM table1 
LOOP 
    FOR loop_helper2 IN 
     SELECT name 
     FROM table2 
    LOOP 
     loop_helper1 := public.setfield (loop_helper1 ,loop_helper2.name ,function_call(123)); 
    END LOOP; 
END LOOP; 

는 전체 복합 형을 할당 할 특히, 간단한 방법이있을 수 있습니다 ...

+0

감사합니다! 흥미로운 읽기. – ptrn

+0

새로운 독자들에게 :'hstore' 확장 (PG 9.0) 또는 PG 9.3/9.4와 함께 제공되는 새로운 내장'json' 기능을 사용하여 더 간단하고 훨씬 빠른 방법이 있습니다. 새로운 솔루션 (및 벤치 마크)은 다음 링크의 @Erwin 질문에 추가되었습니다. http://stackoverflow.com/a/28673097/1914376 –