Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Цикл по полям таблицы на pl/pgsql
|
|||
|---|---|---|---|
|
#18+
Всем здрасьте! Есть таблица с пронумерованными полями (dim_1, dim_2, dim_3, ...) Есть ли возможность в цикле перебирать поля? Пробовал создавать и выполнять динамические команды (EXECUTE) с созданными именами полей, но никак не могу присвоить результат переменной в функции. (В доке так и пишется: EXECUTE не работает с SELECT INTO) Вот как я пробовал: DECLARE t TEXT; name TEXT; BEGIN FOR c IN 1 .. 4 LOOP name := replace('dim_' || to_char (c, '9999'),' ',''); t:='SELECT ' || name || ' FROM materials WHERE material_id_pkey=2'; EXECUTE t; END LOOP; RETURN name; END; А результат-то в пустоту :( Неужели здесь тупик?! Помогите кто чем может. ПЛЗ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2006, 22:56 |
|
||
|
Цикл по полям таблицы на pl/pgsql
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 07:30 |
|
||
|
Цикл по полям таблицы на pl/pgsql
|
|||
|---|---|---|---|
|
#18+
Спасибо ZemA за ответ. Боюсь, что здесь те же грабли: Результат: ERROR: record "values" has no field "name" Нам нужно, чтобы в values.name вместо name использовалось значение строковой переменной, а выражение res := res || ' ' || values.name использует имя поля name :( RAISE NOTICE 'Values = %1', values; - выдает следующее NOTICE: Values = (120.000) NOTICE: Values = (60.000) NOTICE: Values = (5.000) NOTICE: Values = (0.000) Так что результат есть, но как его достать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 09:56 |
|
||
|
Цикл по полям таблицы на pl/pgsql
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 10:24 |
|
||
|
Цикл по полям таблицы на pl/pgsql
|
|||
|---|---|---|---|
|
#18+
СПАСИБО МУЖИКИ! Вы здорово мне помогли! Mmm I get high with a little help from my friends, Mmm I'm gonna to try with a little help from my friends. (c) The Beatles ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 10:37 |
|
||
|
Цикл по полям таблицы на pl/pgsql
|
|||
|---|---|---|---|
|
#18+
Да... задачка усложнилась. Теперь нужно что-то типа: FOR myrec IN (SELECT ..., dim_1, dim_2, dim_3, ... сложный запрос из нескольких таблиц) LOOP < цикл по полям записи myrec dim_1, dim_2, ... > LOOP res := res || dim_X; -- например -- здесь будет довольно большой кусок кода одинаковый для всех полей END LOOP; END LOOP; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 11:11 |
|
||
|
Цикл по полям таблицы на pl/pgsql
|
|||
|---|---|---|---|
|
#18+
А такое не прокатит? Код: plaintext 1. 2. 3. Переменная fields будет содержать в себе перечень всех полей через запятую. Работает в версии > 7.4. Про array_accum можно почитать в хелпе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 11:29 |
|
||
|
Цикл по полям таблицы на pl/pgsql
|
|||
|---|---|---|---|
|
#18+
К сожалению это не решает мою проблему. Мне нужно в строке вида: %2x%1x%3 placeholder-ы %Х заменять значениями соответствующих полей [ dim_X ] Чтобы в итоге получилось, например, такое: 120х60х5.0 Строка формата может быть какая угодно. Вот примеры: Ø%1 %1x%2x%3 %3x%1x%2 NV%1 и т.д. К сожалению pl/pgsql - не С++ а мне нужна функция на сервере :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 12:48 |
|
||
|
Цикл по полям таблицы на pl/pgsql
|
|||
|---|---|---|---|
|
#18+
посмотри в сторону plperl или plpython :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 12:56 |
|
||
|
Цикл по полям таблицы на pl/pgsql
|
|||
|---|---|---|---|
|
#18+
Оказывается и с pl/pgsql проблем-то нету. и цикл никакой не нужен :) res := replace (res,'%1', to_char(myrec.dimension_1, fmt)); res := replace (res,'%2', to_char(myrec.dimension_2, fmt)); res := replace (res,'%3', to_char(myrec.dimension_3, fmt)); res := replace (res,'%4', to_char(myrec.dimension_4, fmt)); .... Хорошо иногда с ручника сниматься ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 14:12 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33789609&tid=2006306]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 255ms |
| total: | 440ms |

| 0 / 0 |
