powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Цикл for in loop в Oracle и Postgresql
12 сообщений из 12, страница 1 из 1
Цикл for in loop в Oracle и Postgresql
    #39572832
andreych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просьба сильно не пинать. Перебираюсь с 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
Цикл for in loop в Oracle и Postgresql
    #39572840
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreych
Код: plsql
1.
2.
3.
4.
...
END LOOP;
commit;
END;





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

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

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

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

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

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

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

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

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

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

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


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