Переход от циклов FOR в plpgsql к командам SQL на основе множеств

У меня довольно тяжелый запрос сFOR цикл переписать и хотел бы сделать это проще, используя больше SQL вместо конструкций plpgsql. Запрос выглядит так:

FOR big_xml IN SELECT unnest(xpath('//TAG1', my_xml)) LOOP
   str_xml = unnest(xpath('/TAG2/TYPE/text()', big_xml));

      FOR single_xml IN SELECT unnest(xpath('/TAG2/single', big_xml)) LOOP

         CASE str_xml::INT
           WHEN 1
           THEN
            INSERT INTO tab1(id, xml) VALUES (1, single_xml);
           WHEN 2
           THEN
            INSERT INTO tab2(id, xml) VALUES (1, single_xml);
           WHEN 3
            [...] 
           WHEN 11
            [...]
           ELSE 
              RAISE EXCEPTION 'something'
           END CASE;
      END LOOP;
    END LOOP;

RETURN xmlelement(NAME "out", xmlforest(1 AS out));

Я начал переписывать его для лучшей производительности с:

INSERT INTO tab1(id, xml)
  SELECT 1, unnest(xpath('/TAG2/single', (SELECT unnest(xpath('//TAG1', my_xml)))); 

Но я не уверен, как бороться с этимиCASE ... INSERT заявления. Есть идеи? Или, может быть, мой подход совершенно не так?

отредактировано 25.02.14: PostgreSQL 9.3.1

Ответы на вопрос(1)

Ваш ответ на вопрос