Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Перенос данных из одной таблицы в другую, находящихся на разных БД
|
|||
|---|---|---|---|
|
#18+
Структура и наименование таблицы неизвестна, но таблицы одинкаовые на разных БД Входные параметры: in_table_name, in_condition и in_schemaname; Кусок функции: for v_rec in execute $$ select * from $$ || in_table_name || $$ where $$ || in_condition LOOP v_cnt := v_cnt + 1; v_sql := $$INSERT INTO $$ || in_table_name || $$ VALUES ($$; v_cnt_r := 0; for v_rec_field in execute $$ select * from pg_stats where schemaname = '$$ || in_schemaname || $$' and tablename = '$$ || in_table_name || $$'$$ loop v_cnt_r:= v_cnt_r + 1; v_text_r := v_rec.v_rec_field.attname; if v_cnt_r = 1 then v_sqlmain_r := v_text_r; else v_sqlmain_r := v_sqlmain_r ||$$, $$|| v_text_r; end if; end loop; v_sql := v_sql || v_sqlmain_r ||$$ ); $$; if v_cnt=1 then v_sqlmain := v_sql; else v_sqlmain := v_sqlmain || ' ' || v_sql; end if; END LOOP; Проблема в том, что естественно он ругается на запись: v_text_r := v_rec.v_rec_field.attname; - нет в v_rec поля v_rec_field.attname Вопрос: Как передать туда динамическую переменную v_rec_field.attname, чтобы передалось значение, а не имя переменной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2008, 10:39 |
|
||
|
Перенос данных из одной таблицы в другую, находящихся на разных БД
|
|||
|---|---|---|---|
|
#18+
Поправка: Собственно это формирование скрипта для переноса данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2008, 11:02 |
|
||
|
Перенос данных из одной таблицы в другую, находящихся на разных БД
|
|||
|---|---|---|---|
|
#18+
KatrinOgonekПроблема в том, что естественно он ругается на запись: v_text_r := v_rec.v_rec_field.attname; Код: plaintext З.Ы. Моё ИМХО :) строки лучше воспринимаются в кавычках, чем в баксах :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2008, 11:41 |
|
||
|
Перенос данных из одной таблицы в другую, находящихся на разных БД
|
|||
|---|---|---|---|
|
#18+
ERROR: record "v_rec" has no field "v_rec_field" v_rec_field - это переменная в которой хранится имя поля, как её оттуда достать?..хз.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2008, 11:51 |
|
||
|
Перенос данных из одной таблицы в другую, находящихся на разных БД
|
|||
|---|---|---|---|
|
#18+
В общем, сначала получаем список полей таблицы Код: plaintext 1. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2008, 12:05 |
|
||
|
Перенос данных из одной таблицы в другую, находящихся на разных БД
|
|||
|---|---|---|---|
|
#18+
Вот написала я такую вещь, учитываю последнее сообщение: for v_rec_field in execute $$ select * from pg_stats where schemaname = '$$ || in_schemaname || $$' and tablename = '$$ || in_table_name || $$'$$ LOOP v_cnt := v_cnt + 1; v_sql := $$INSERT INTO $$ || in_table_name || $$ VALUES ($$; v_cnt_r := 0; for v_rec in execute $$ select $$ || v_rec_field.attname || $$ AS value from $$ || in_table_name || $$ where $$ || in_condition loop v_cnt_r:= v_cnt_r + 1; v_text_r := v_rec.value; if v_cnt_r = 1 then v_sqlmain_r := v_text_r; else v_sqlmain_r := v_sqlmain_r ||$$, $$|| v_text_r; end if; end loop; v_sql := v_sql || v_sqlmain_r ||$$ ); $$; if v_cnt=1 then v_sqlmain := v_sql; else v_sqlmain := v_sqlmain || ' ' || v_sql; end if; END LOOP; И выдает ошибку type of "v_rec.value" does not match that when preparing the plan, первый раз с таким сталкиваюсь( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2008, 12:56 |
|
||
|
Перенос данных из одной таблицы в другую, находящихся на разных БД
|
|||
|---|---|---|---|
|
#18+
KatrinOgonekИ выдает ошибку type of "v_rec.value" does not match that when preparing the plan, первый раз с таким сталкиваюсь(Да, известная фича постгреса :(. Но лечится. Сделайте явное приведение типа Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2008, 13:02 |
|
||
|
Перенос данных из одной таблицы в другую, находящихся на разных БД
|
|||
|---|---|---|---|
|
#18+
Спасибо большое! Только проблема в том, что теперь выводится хрень типа: INSERT INTO tbl_fio VALUES('first name'); INSERT INTO tbl_fio VALUES('second name'); По значениям вставляет..а не целой строкой..надо думать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2008, 13:55 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=270&tid=2004390]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 359ms |

| 0 / 0 |
