CftClub.ru
Клуб специалистов ЦФТ-Банк

как отловить ID новой записи?

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
dumpino
Участник со стажем


Вступление в Клуб: 13.12.2011
СообщениеПт Авг 10, 2012 09:15   как отловить ID новой записи? Ответить с цитатой
Полезность: Нет оценки
как можно отловить ID новой записи в справочнике в следующих вариантах работы:

1. В процедуре конструкторе (Добавить новую запись)
2. В другой процедуре, которая вызывает конструктор из п.1 с помощью PLPCALL

у?
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеПт Авг 10, 2012 09:26   Re: как отловить ID новой записи? Ответить с цитатой
Полезность: Нет оценки
dumpino пишет:
как можно отловить ID новой записи в справочнике в следующих вариантах работы:

1. В процедуре конструкторе (Добавить новую запись)
2. В другой процедуре, которая вызывает конструктор из п.1 с помощью PLPCALL

у?

Конструктор возвращает ссылку на созданный экземпляр.

Код:
V_PARAM_FOR_PLAN_REF := [PARAM_FOR_PLAN].[NEW#AUTO]

Код:
("<% PLPCALL %VAR%.V_PARAM_FOR_PLAN_REF := [PARAM_FOR_PLAN].[NEW#AUTO]() %>")
dumpino
Участник со стажем


Вступление в Клуб: 13.12.2011
СообщениеПт Авг 10, 2012 09:37   Re: как отловить ID новой записи? Ответить с цитатой
Полезность: Нет оценки
devor пишет:
dumpino пишет:
как можно отловить ID новой записи в справочнике в следующих вариантах работы:

1. В процедуре конструкторе (Добавить новую запись)
2. В другой процедуре, которая вызывает конструктор из п.1 с помощью PLPCALL

у?

Конструктор возвращает ссылку на созданный экземпляр.

Код:
V_PARAM_FOR_PLAN_REF := [PARAM_FOR_PLAN].[NEW#AUTO]

Код:
("<% PLPCALL %VAR%.V_PARAM_FOR_PLAN_REF := [PARAM_FOR_PLAN].[NEW#AUTO]() %>")


спасибо за ответ.

но, кажется, я понял, то что я хочу сделать так не получится. пока не создастся запись, ID у неё не будет. Придется делать обходным путём.

Вначале [NEW#AUTO], а потом сразу [EDIT#AUTO]
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеПт Авг 10, 2012 09:55   Re: как отловить ID новой записи? Ответить с цитатой
Полезность: 1
dumpino пишет:
devor пишет:
dumpino пишет:
как можно отловить ID новой записи в справочнике в следующих вариантах работы:

1. В процедуре конструкторе (Добавить новую запись)
2. В другой процедуре, которая вызывает конструктор из п.1 с помощью PLPCALL

у?

Конструктор возвращает ссылку на созданный экземпляр.

Код:
V_PARAM_FOR_PLAN_REF := [PARAM_FOR_PLAN].[NEW#AUTO]

Код:
("<% PLPCALL %VAR%.V_PARAM_FOR_PLAN_REF := [PARAM_FOR_PLAN].[NEW#AUTO]() %>")


спасибо за ответ.

но, кажется, я понял, то что я хочу сделать так не получится. пока не создастся запись, ID у неё не будет. Придется делать обходным путём.

Вначале [NEW#AUTO], а потом сразу [EDIT#AUTO]




пример:

Код:
declare
 
    v_param            [PARAM_FOR_PLAN];
begin
    v_param%init;
    V_PARAM_FOR_PLAN_REF:= ::[PARAM_FOR_PLAN]%insert(v_param);
    stdio.put_line_buf('<% PLPCALL %VAR%.V_PARAM_FOR_PLAN_REF.[EDIT#AUTO]() %>');
end;


ну или заполняешь структуру необходимыми данными до инсерта
_________________
всегда есть как минимум 2 выхода
dumpino
Участник со стажем


Вступление в Клуб: 13.12.2011
СообщениеПт Авг 10, 2012 10:41   Re: как отловить ID новой записи? Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:

пример:

Код:
declare
 
    v_param            [PARAM_FOR_PLAN];
begin
    v_param%init;
    V_PARAM_FOR_PLAN_REF:= ::[PARAM_FOR_PLAN]%insert(v_param);
    stdio.put_line_buf('<% PLPCALL %VAR%.V_PARAM_FOR_PLAN_REF.[EDIT#AUTO]() %>');
end;


ну или заполняешь структуру необходимыми данными до инсерта


во, отличная штука. вот так и буду делать, спасибо!
Vovidez
Профи


Вступление в Клуб: 27.09.2007
СообщениеСр Авг 15, 2012 09:58   Re: как отловить ID новой записи? Ответить с цитатой
Полезность: 1
dumpino пишет:
как можно отловить ID новой записи в справочнике в следующих вариантах работы:

1. В процедуре конструкторе (Добавить новую запись)


См. признак Простого констурктора: "При работе "простого" конструктора перед его вызовом из АРМа "Навигатор" создается пустой экземпляр, в который и записываются реквизиты вновь создаваемого объекта. При работе же обычного ("сложного") конструктора экземпляр создается не перед вызовом операции, а в ней самой после заполнения реквизитов (если операция не использует коллекции, принадлежащие вновь создаваемому экземпляру). Введение "простого" конструктора обусловлено тем, что на таблице типа могут быть, например, ограничения целостности, и тогда работа "сложного" конструктора будет невозможна, т.к. при создании пустого экземпляра не будут соблюдаться условия ограничения."

Кто мешает выставить флаг простого конструктора и иметь ID экземпляра уже на этапе поднятия ЭФ конструктора?
dumpino
Участник со стажем


Вступление в Клуб: 13.12.2011
СообщениеСр Авг 15, 2012 11:16   Re: как отловить ID новой записи? Ответить с цитатой
Полезность: Нет оценки
Vovidez пишет:

См. признак Простого констурктора: "При работе "простого" конструктора перед его вызовом из АРМа "Навигатор" создается пустой экземпляр, в который и записываются реквизиты вновь создаваемого объекта. При работе же обычного ("сложного") конструктора экземпляр создается не перед вызовом операции, а в ней самой после заполнения реквизитов (если операция не использует коллекции, принадлежащие вновь создаваемому экземпляру). Введение "простого" конструктора обусловлено тем, что на таблице типа могут быть, например, ограничения целостности, и тогда работа "сложного" конструктора будет невозможна, т.к. при создании пустого экземпляра не будут соблюдаться условия ограничения."

Кто мешает выставить флаг простого конструктора и иметь ID экземпляра уже на этапе поднятия ЭФ конструктора?


спасибо, это то что нужно. Не знал про этот признак.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru