2013-08-26 5 views
1

моя инструкция sql построена динамически. У меня есть что-то вродеВосстановить динамические столбцы записей

strSql := 'select name, tel, adress, activity_id as filtre_1, country_id as filtre_2, ... from ... where ...'

я могу иметь от 1 до п фильтр и filter_1 может быть activity_id в COUNTRY_ID, порядок не имеет значения.

Как получить значения filter_1, filter_2, поскольку я не знаю, сколько запросов отправлено обратно?

Normaly, чтобы получить значения, я:

FOR rowResult IN EXECUTE strSql LOOP 
     name := rowResult.name 
     tel := rowResult.tel 
     adress := rowResult.adress 
     filtre_1 := rowResult.filtre_1 
     filtre_2 := rowResult.filtre_2 
END LOOP; 

Как это не может быть сделано, я хотел бы сделать что-то вроде

FOR rowResult IN EXECUTE strSql LOOP 
     name := rowResult.name 
     tel := rowResult.tel 
     adress := rowResult.adress 
     filtre_1 := rowResult("filtre_1") 
     filtre_2 := rowResult("filtre_2") 
END LOOP; 

но rowResult(stringfield) не существует.

Есть ли у кого-то идея?

Благодаря

ответ

1

Может быть, есть они более эффективные способы, но вы можете получить доступ к полю из анонимных записей пути преобразования его в массив:

strSql := 'select name, activity_id, country_id from test where activity_id = 2 and country_id = 1'; 
for rowResult in execute strSql loop 
    temp := string_to_array(trim(rowResult::text, '()'), ','); 
    activity_id := temp[2]; 
    country_id := temp[3]; 
end loop; 

см sql fiddle demo

Я думаю, что это возможно использовать hstore для этого, но не может проверить прямо сейчас:

temp := hstore(rowResult); 
    activity_id := temp -> 'f2' 
    country_id := temp -> 'f3' 
+0

Идея хорошая, но, видимо, я сделал что-то не так, потому что это не работает для меня: –

+0

вы попробовали демонстрацию скрипки? –

+0

Вот результат моей временной переменной: УВЕДОМЛЕНИЕ: temp = {10, "", "", "", "", "", "\" ABC 1.3.1.1 \ "", "", 33,42 , ",", ", 14, FILTRE, 12, FILTRE," ", FILTRE, 7, FILTRE} Когда я пытаюсь прочитать coloumn 11, я получаю это сообщение об ошибке: ОШИБКА: не может подстроить текст типа, потому что это не массив –

Смежные вопросы