Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.08;
Скачать: CL | DM;

Вниз

Получение номера из БД в программу   Найти похожие ветки 

 
Scorpio ©   (2006-08-02 18:08) [0]

Добрый день мастера. Подскажите такую вещь.
Произвожу запись в табицу, тригером получаю порядковый номер при записи. Как мне в момент записи получить этот номер в программе., он мне необходим для протоколирования действий., чтобы знать где, и что он вносил, данные вношу по пинципу (ФИО (вношу из переменной) + № введенной карточки (которую только ввели)), это одно поле типа 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 компов. Регистрируется миграционная карточка. Занесли данные на человека. Программа должна отпечатать эту карточку вместе с номером полученным от сиквенции, на каждом посту своя сиквенция, со своим специфическим кодом. Как мне распечатать этот номер ??


 
Reindeer Moss Eater ©   (2006-08-02 18:13) [1]

он мне необходим для протоколирования действий., чтобы знать где, и что он вносил, данные вношу по пинципу (ФИО (вношу из переменной) + № введенной карточки (которую только ввели)), это одно поле типа VARCHAR2(60).

А протоколировать прямо на сервере нельзя?


 
Desdechado ©   (2006-08-02 18:16) [2]

Перезапросить только что введенные данные по уникальной комбинации полей.

PS Протоколирование, имхо, лучше делать средствами триггеров AFTER на сервере. Тогда мимо проги ничего не введут.
PPS странная логика
nLi:=:NEW.NI;
INSERT INTO "user"."LI_M"(LI_NI,MIG_NI) VALUES (nLi,:NEW.NI);


 
Reindeer Moss Eater ©   (2006-08-02 18:18) [3]

SELECT MIG_K.nextval
INTO :NEW.NI
FROM dual;

select sysdate into :NEW.DATE_
from dual;


А это спецом для того, чтобы сервер трудился как можно больше?
:)


 
Scorpio ©   (2006-08-02 18:37) [4]


> nLi:=:NEW.NI;
> INSERT INTO "user"."LI_M"(LI_NI,MIG_NI) VALUES (nLi,:NEW.
> NI);
>

Это для свзи м/у таблицами, 1 ко многим.


> SELECT MIG_K.nextval
> INTO :NEW.NI
> FROM dual;
>
> select sysdate into :NEW.DATE_
> from dual;


Для внесения даты и времени на момент создания карточки.  Человеку дается 24 часа на регистрацию в паспортном столе.


 
Reindeer Moss Eater ©   (2006-08-02 18:39) [5]

Для внесения даты и времени на момент создания карточки.  Человеку дается 24 часа на регистрацию в паспортном столе.

А одним селектом нельзя дать человеку 24 часа на регистрацию в паспортном столе?
:)


 
Scorpio ©   (2006-08-02 18:40) [6]


> PS Протоколирование, имхо, лучше делать средствами триггеров
> AFTER на сервере. Тогда мимо проги ничего не введут.


Мне удобней на програмном уровне вести протоколирование, в зависимости от разных форм, я вношу совершенно разные данные.


 
Scorpio ©   (2006-08-02 18:41) [7]


> А одним селектом нельзя дать человеку 24 часа на регистрацию
> в паспортном столе?
> :)


Моя ошибка, необращал внимания, а камне все таки номерок карточки получить ???


 
Desdechado ©   (2006-08-02 18:42) [8]

> Это для свзи м/у таблицами, 1 ко многим.
Вот только почему-то одно и то же пишется в оба поля. Хороша связь!
Я ж не зря выделил интересные моменты.


 
Desdechado ©   (2006-08-02 18:44) [9]

> Мне удобней на програмном уровне вести протоколирование
Тогда готовься к тому, что протокол будет с дырами, по которым не определить, кто автор некоторых данных.

> номерок карточки получить
см. [2]


 
Reindeer Moss Eater ©   (2006-08-02 18:44) [10]

Моя ошибка, необращал внимания, а камне все таки номерок карточки получить ???

Нужен номер на клиенте - получай номер из сикванса на клиенте. И вставляй его с клиента. Триггер убери.


 
Scorpio ©   (2006-08-02 18:45) [11]

чесно говоря не знаю как работает, но работает, проверено, уже больше года в одно поле идет Number(12), в другое Number(17).


 
Scorpio ©   (2006-08-02 18:50) [12]


> Нужен номер на клиенте - получай номер из сикванса на клиенте.
>  И вставляй его с клиента. Триггер убери.


А как точно писать, у меня с одним сиквенсом работают сразу 5-8 машин, и 2-е, без тригера помоему у меня начнут появляться дырки


 
Desdechado ©   (2006-08-02 18:50) [13]

Сорри, пишется конечно не однои то же, но что пишется, все равно непонятно. Один код подменяется другим.... Странное поведение...


 
Desdechado ©   (2006-08-02 18:52) [14]

Scorpio ©   (02.08.06 18:50) [12]
Значение, полученное от генератора одной машиной, на второй уже не повторится.
А по поводу дырок - они в любом случае будут, если вдруг запись не пройдет и будет откат транзакции.


 
Reindeer Moss Eater ©   (2006-08-02 18:52) [15]

без тригера помоему у меня начнут появляться дырки

Дырки будут и с триггером если транзакция откатится.


 
Scorpio ©   (2006-08-02 18:52) [16]

хорошо, а как правильно ???


 
Reindeer Moss Eater ©   (2006-08-02 18:55) [17]

> хорошо, а как правильно ???

как надо так и правильно.
надо иметь значение ключа вставляемой записи на клиенте - нужно тянуть ключ на клиента и вставлять его оттуда.
Либо использовать специализированные библиотеки доступа типа odac


 
Sergey13 ©   (2006-08-03 09:39) [18]

В Оракле (это он вроде) из Insert-а можно получить новое значение фразой RETURNING NI INTO :Parametr


 
mr.il ©   (2006-08-03 16:13) [19]

может проще написать SP в нее передавать данные записи, а из нее получать номер.


 
ANB ©   (2006-08-04 12:05) [20]

млин, читаем про returning и не мучаемся.


 
Desdechado ©   (2006-08-04 12:13) [21]

ANB ©   (04.08.06 12:05) [20]
Не все компоненты поддерживают.


 
Val(from Kiev)   (2006-08-04 13:59) [22]

чем returning в данном случае будет отличаться от
select seq1.nextval into newseqval from dual;
insert into tt(myval) values(newseqval);
?


 
Sergey13 ©   (2006-08-04 14:03) [23]

> [22] Val(from Kiev)   (04.08.06 13:59)

Тем, что при вставке вернет значение клиенту для дальнейшего отбражения и обработки.


 
Val(from Kiev)   (2006-08-04 14:12) [24]

Не факт, что логика вставки будет заключаться в одном запросе. Думаю, такие вещи лучше оборачивать в процедуры все-таки.


 
Sergey13 ©   (2006-08-04 14:29) [25]

> [24] Val(from Kiev)   (04.08.06 14:12)

Думаю в разных случаях лучшими будут разные решения. И то, при условии, что есть четкий критерий лучшести. 8-)


 
Val(from Kiev)   (2006-08-04 14:31) [26]

безусловно :)



Страницы: 1 вся ветка

Текущий архив: 2006.10.08;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.039 c
1-1156780556
J o i n t
2006-08-28 19:55
2006.10.08
Rave Report, выборка данных


3-1154672476
Progr_Neud
2006-08-04 10:21
2006.10.08
Параметры в ADO: q2: Parameter i not found


1-1156399727
tButton
2006-08-24 10:08
2006.10.08
рендеринг кучи текста


15-1158563005
VitV
2006-09-18 11:03
2006.10.08
Название компонента


2-1158425181
PSPF2003
2006-09-16 20:46
2006.10.08
StrToHex?