powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Переменные связки
3 сообщений из 3, страница 1 из 1
Переменные связки
    #39521405
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер,

Почему PL/SQL преобразует свои переменные в переменные связки для кейса:

Код: plsql
1.
2.
3.
4.
5.
6.
begin
  for i in (select id from t) loop
    update t set n = n + 1 where id = i.id;
  end loop;
  commit;
end;


, а для кейса:
Код: plsql
1.
2.
3.
4.
5.
6.
begin
  for i in (select id from t) loop
    execute immediate 'update t set n = n + 1 where id = '||i.id;
  end loop;
  commit;
end;


такого преобразования не происходит?
...
Рейтинг: 0 / 0
Переменные связки
    #39521497
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogПочемуBy design, тролль.
...
Рейтинг: 0 / 0
Переменные связки
    #39521572
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frog,

потому что во втором случае ты скармливаешь ему строку. откуда ему знать что там внутри на момент парсинга анонимного блока (в котором находится выражение EXECUTE IMMEDIATE ? - вот и происходит динамический SQL с хард парсом при каждом конкретном значении i.id.
если ты хочешь динамику с биндом, используй силу, Люк:
Код: plsql
1.
execute immediate 'update t set n = n + 1 where id = :id' using i.id;

хотя, не понимаю, зачем тут динамика
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Переменные связки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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