Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Цикл for in loop в Oracle и Postgresql / 12 сообщений из 12, страница 1 из 1
20.12.2017, 15:34
    #39572832
andreych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл for in loop в Oracle и Postgresql
Просьба сильно не пинать. Перебираюсь с Oracle на Postgresql поэтому появляются дурацкие вопросы но которые иногда ставят в тупик.
Задача простая, перетянуть данные из одной таблицы схемы в другую другой схемы.
В Oracle делается за минуту циклом for

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
BEGIN
FOR rec IN (SELECT 
  id,
  geom,
  a,
  b,
  c,
  d,
  e,
  f
FROM 
  konvert.m_1_2y)
LOOP
  INSERT INTO 
  kollep.kol_ses_opor
(
  geom,
  support_number,
  support_type,
  support_rotatable,
  altitude,
  latitude,
  longitude,
  line_name,
  voltage
)
VALUES (
  rec.geom,
  rec.a,
  rec.b,
  rec.c,
  rec.d,
  rec.e,
  rec.f,
  'М-1-2',
  '35'
);
END LOOP;
commit;
END;


тоже самое в postgresql не работает
Перечитав документацию на https://postgrespro.ru внес изменения
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
DECLARE
rec RECORD;
BEGIN
FOR rec IN (SELECT 
  id,
  geom,
  a,
  b,
  c,
  d,
  e,
  f
FROM 
  konvert.m_1_2y)
LOOP
  INSERT INTO 
  kollep.kol_ses_opor
(
  geom,
  support_number,
  support_type,
  support_rotatable,
  altitude,
  latitude,
  longitude,
  line_name,
  voltage
)
VALUES (
  rec.geom,
  rec.a,
  rec.b,
  rec.c,
  rec.d,
  rec.e,
  rec.f,
  'М-1-2',
  '35'
);
END LOOP;
commit;
END;



Но выдается сообшение

ОШИБКА: ошибка синтаксиса (примерное положение: "RECORD")
LINE 1: DECLARE rec RECORD;
Тут и возник дурацкий вопрос. Чего ему не хватает? Знающие люди помогите выполнить элементарное действие.
...
Рейтинг: 0 / 0
20.12.2017, 15:38
    #39572840
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл for in loop в Oracle и Postgresql
andreych
Код: plsql
1.
2.
3.
4.
...
END LOOP;
commit;
END;





Вы действительно прочитали документацию?
...
Рейтинг: 0 / 0
20.12.2017, 15:51
    #39572860
andreych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл for in loop в Oracle и Postgresql
Если честно не понял.
Точка с запятой после end убрал, commit убрал. Ошибка осталась.
Нормально подскажите, может просто глаз замылился.
...
Рейтинг: 0 / 0
20.12.2017, 15:55
    #39572862
bff7755a
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл for in loop в Oracle и Postgresql
andreychЕсли честно не понял.
Точка с запятой после end убрал, commit убрал. Ошибка осталась.
Нормально подскажите, может просто глаз замылился.

Где сама процедура то? Оберните в
Код: sql
1.
2.
3.
4.
5.
6.
7.
do $$
declare
...
begin
...
end;
$$ language plpgsql;
...
Рейтинг: 0 / 0
20.12.2017, 15:55
    #39572863
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл for in loop в Oracle и Postgresql
andreych,

Приведите весь фрагмент кода целиком.

Кстати, Ваша задача лучше решается одним запросом без процедур.
...
Рейтинг: 0 / 0
20.12.2017, 15:57
    #39572867
Ы2
Ы2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл for in loop в Oracle и Postgresql
andreych, не нужен вам цикл, прочитайте в документации про insert.
...
Рейтинг: 0 / 0
20.12.2017, 16:07
    #39572875
andreych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл for in loop в Oracle и Postgresql
ursido,

В оракуле это просто скрипт, я по аналогии и делал. Процедуры тут нет.
...
Рейтинг: 0 / 0
20.12.2017, 16:10
    #39572878
andreych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл for in loop в Oracle и Postgresql
bff7755a,

Спасибо. Вот уж действительно век учись
...
Рейтинг: 0 / 0
20.12.2017, 23:23
    #39573159
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл for in loop в Oracle и Postgresql
andreych,

Не надо вам тут циклы писать на plpgsql (они в Postgres очень тяжелые).
Чем INSERT INTO … SELECT * FROM … не устраивает-то?
...
Рейтинг: 0 / 0
21.12.2017, 09:18
    #39573276
andreych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл for in loop в Oracle и Postgresql
vyegorov,

Просто привычка :-)
...
Рейтинг: 0 / 0
21.12.2017, 09:38
    #39573291
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл for in loop в Oracle и Postgresql
andreych,

А на Oracle не c MS SQL Server, случаем, перебирались? Насколько помню - ораклисты ярые противники курсоров и обработок данных в цикле, в отличие от адептов MS SQL Server.

Правильный ответ вам уже дали - зачем цикл, если можно простым INSERT SELECT? У вас же линейное перекачивание данных, без какой бы то ни было трансформации...
...
Рейтинг: 0 / 0
21.12.2017, 10:38
    #39573336
andreych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл for in loop в Oracle и Postgresql
Щукина Анна,

Это Вам так кажется :-) На самом деле это достаточно кропотливая работа по закачке из МапИнфо в гео базу опор линий ЛЭП.
Подрядчик, который съемку делал, такого наворотил, что мама не горюй.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Цикл for in loop в Oracle и Postgresql / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]