![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получение номера из БД в программу [D7]
Scorpio © (2006-08-02 18:08:00)Добрый день мастера. Подскажите такую вещь.
Произвожу запись в табицу, тригером получаю порядковый номер при записи. Как мне в момент записи получить этот номер в программе., он мне необходим для протоколирования действий., чтобы знать где, и что он вносил, данные вношу по пинципу (ФИО (вношу из переменной) + № введенной карточки (которую только ввели)), это одно поле типа VARCHAR2(60).
Отдельно создавать поля не могу, довольствуюсь тем что есть.
Номер получаю из такого тригера:
CREATE OR REPLACE TRIGGER "LI_MIG" BEFORE INSERT ON "KART" FOR EACH ROW
DECLARE
nKolNi NUMBER(17);
nLi NUMBER;
BEGIN
IF USER='user' THEN
nLi:=:NEW.NI;
SELECT MIG_K.nextval
INTO :NEW.NI
FROM dual;
select sysdate into :NEW.DATE_
from dual;
INSERT INTO "user"."LI_M"(LI_NI,MIG_NI) VALUES (nLi,:NEW.NI);
END IF;
END;
А если перефрозировать иначе. Есть миграционные посты, они вносят данные о людях. На каждом посту по 5-8 компов. Регистрируется миграционная карточка. Занесли данные на человека. Программа должна отпечатать эту карточку вместе с номером полученным от сиквенции, на каждом посту своя сиквенция, со своим специфическим кодом. Как мне распечатать этот номер ??
Val(from Kiev) (2006-08-04 14:31:00) [1]безусловно :)
Sergey13 (2006-08-04 14:29:00) [2]> [24] Val(from Kiev) (04.08.06 14:12)
Думаю в разных случаях лучшими будут разные решения. И то, при условии, что есть четкий критерий лучшести. 8-)
Val(from Kiev) (2006-08-04 14:12:00) [3]Не факт, что логика вставки будет заключаться в одном запросе. Думаю, такие вещи лучше оборачивать в процедуры все-таки.
Sergey13 (2006-08-04 14:03:00) [4]> [22] Val(from Kiev) (04.08.06 13:59)
Тем, что при вставке вернет значение клиенту для дальнейшего отбражения и обработки.
Val(from Kiev) (2006-08-04 13:59:00) [5]чем returning в данном случае будет отличаться от
select seq1.nextval into newseqval from dual;
insert into tt(myval) values(newseqval);
?
Desdechado (2006-08-04 12:13:00) [6]ANB © (04.08.06 12:05) [20]
Не все компоненты поддерживают.
ANB (2006-08-04 12:05:00) [7]млин, читаем про returning и не мучаемся.
mr.il (2006-08-03 16:13:00) [8]может проще написать SP в нее передавать данные записи, а из нее получать номер.
Sergey13 (2006-08-03 09:39:00) [9]В Оракле (это он вроде) из Insert-а можно получить новое значение фразой RETURNING NI INTO :Parametr
Reindeer Moss Eater (2006-08-02 18:55:00) [10]> хорошо, а как правильно ???
как надо так и правильно.
надо иметь значение ключа вставляемой записи на клиенте - нужно тянуть ключ на клиента и вставлять его оттуда.
Либо использовать специализированные библиотеки доступа типа odac
Desdechado (2006-08-02 18:52:00) [11]Scorpio © (02.08.06 18:50) [12]
Значение, полученное от генератора одной машиной, на второй уже не повторится.
А по поводу дырок - они в любом случае будут, если вдруг запись не пройдет и будет откат транзакции.
Scorpio (2006-08-02 18:52:00) [12]хорошо, а как правильно ???
Reindeer Moss Eater (2006-08-02 18:52:00) [13]без тригера помоему у меня начнут появляться дырки
Дырки будут и с триггером если транзакция откатится.
Desdechado (2006-08-02 18:50:00) [14]Сорри, пишется конечно не однои то же, но что пишется, все равно непонятно. Один код подменяется другим.... Странное поведение...
Scorpio (2006-08-02 18:50:00) [15]
> Нужен номер на клиенте - получай номер из сикванса на клиенте.
> И вставляй его с клиента. Триггер убери.
А как точно писать, у меня с одним сиквенсом работают сразу 5-8 машин, и 2-е, без тригера помоему у меня начнут появляться дырки
Scorpio (2006-08-02 18:45:00) [16]чесно говоря не знаю как работает, но работает, проверено, уже больше года в одно поле идет Number(12), в другое Number(17).
Reindeer Moss Eater (2006-08-02 18:44:00) [17]Моя ошибка, необращал внимания, а камне все таки номерок карточки получить ???
Нужен номер на клиенте - получай номер из сикванса на клиенте. И вставляй его с клиента. Триггер убери.
Desdechado (2006-08-02 18:44:00) [18]> Мне удобней на програмном уровне вести протоколирование
Тогда готовься к тому, что протокол будет с дырами, по которым не определить, кто автор некоторых данных.
> номерок карточки получить
см. [2]
Desdechado (2006-08-02 18:42:00) [19]> Это для свзи м/у таблицами, 1 ко многим.
Вот только почему-то одно и то же пишется в оба поля. Хороша связь!
Я ж не зря выделил интересные моменты.
Scorpio (2006-08-02 18:41:00) [20]
> А одним селектом нельзя дать человеку 24 часа на регистрацию
> в паспортном столе?
> :)
Моя ошибка, необращал внимания, а камне все таки номерок карточки получить ???