Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Правильно ли так делать?  [new]
Курильщик
Member

Откуда:
Сообщений: 445
если коротко то есть выборка


CURSOR s2 is 
select
  t1.fPerson,
  t1.fLevel,
  t1.fName, 
  t1.fTopic 
from  
  tplanz t1
where
  t1.fPlanEducation is null  
;

далеее пробегаюсь по ней в цикле
  open s2;
    loop
      fetch s2 into
        pfPerson,
        pfLevel,
        pfName, 
        pfTopic;
      exit when s1%NOTFOUND;
      insert 
      into PlanEducation (fPerson, fLevel, fName, fTopic) 
      values (pfPerson, pfLevel, pfName, pfTopic)
      returning fnrec into pfPlanEducation; -- сохраняю идентификатор новой записи fnrec
      -- можно ли прямо тут поменять значение поля fPlanEducation курсора s2
    end loop;
  close s2;

вопрос можно прямо в цикле поменять значение поля курсора s2 по которому идет цикл, не собъет ли это порядок выборки и т.п., нет ли тут каких подводных камней?
7 фев 07, 11:10    [3748539]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли так делать?  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
"Хорошее соглашение по оформлению тем сообщений, используемое многими службами технической поддержки, - применение шаблона "объект - отклонение". Часть "объект" задает, с чем именно возникла проблема, а часть "отклонение" описывает отклонение от ожидаемого поведения."

Я бы озаглавил эту тему:
PL/SQL. INSERT в цикле с курсором. Можно ли изменить поле курсора?

А вы как бы озаглавили тему?

P.S. "Хелп", "Помогите кофейнику", "Вопрос про Оракл", "Не пинайте насмерть" и т.п. не предлагать! :-)
7 фев 07, 11:18    [3748604]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли так делать?  [new]
Курильщик
Member

Откуда:
Сообщений: 445
согласен название темы более чем неудачное.
7 фев 07, 11:19    [3748618]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли так делать?  [new]
Пилот Пиркс
Member

Откуда: Москва
Сообщений: 352
Курильщик

-- можно ли прямо тут поменять значение поля fPlanEducation курсора s2
...

В вашем курсоре нет поля fPlanEducation
Курильщик
вопрос можно прямо в цикле поменять значение поля курсора s2 по которому идет цикл, не собъет ли это порядок выборки и т.п., нет ли тут каких подводных камней?

Поля курсора доступны только для чтения.


p.s.
      exit when s1%NOTFOUND;
не опечатались?
7 фев 07, 11:25    [3748658]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли так делать?  [new]
Курильщик
Member

Откуда:
Сообщений: 445
Пилот Пиркс

В вашем курсоре нет поля fPlanEducation

ну не проблема добавить.
Пилот Пиркс

Курильщик
вопрос можно прямо в цикле поменять значение поля курсора s2 по которому идет цикл, не собъет ли это порядок выборки и т.п., нет ли тут каких подводных камней?

Поля курсора доступны только для чтения.

ок. если я напишу
 update tPlanZ p1 
      set
        fPlanEducation = pfPlanEducation
      where
        p1.fNRec = pftPlanZ;  

Не вызовет ли какие то проблемы с порядком следования записей в текущем курсоре?
ведь курсор основан на выборке имеющей условие t1.fPlanEducation is null
а я как раз заполняю поле fPlanEducation.


Пилот Пиркс

exit when s1%NOTFOUND;

опечатка, закопипастил с цикла s1 и не поменял.
7 фев 07, 11:48    [3748861]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли так делать?  [new]
Пилот Пиркс
Member

Откуда: Москва
Сообщений: 352
Курильщик

ок. если я напишу
 update tPlanZ p1 
      set
        fPlanEducation = pfPlanEducation
      where
        p1.fNRec = pftPlanZ;  

Не вызовет ли какие то проблемы с порядком следования записей в текущем курсоре?
ведь курсор основан на выборке имеющей условие t1.fPlanEducation is null
а я как раз заполняю поле fPlanEducation.

Оракл штука версионная... Ваш курсор увидит те данные, которые были в таблице на момент его открытия.

Но если вы в курсоре допишите for update и сделаете commit - получите ORA-01002
7 фев 07, 11:58    [3748940]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли так делать?  [new]
Курильщик
Member

Откуда:
Сообщений: 445
Спасибо большое.
Я думал в пределах одной процедуры сурсор может подхватить мои изменения (точнее опасался этого)
7 фев 07, 12:03    [3748979]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить