Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.049 c
15-1158484497
PHPDeveloper
2006-09-17 13:14
2006.10.08
Вопрос по БД


2-1158657920
RomanH
2006-09-19 13:25
2006.10.08
Копирование файлов


1-1156311162
VitalikS
2006-08-23 09:32
2006.10.08
Запуск стороннего exe


6-1147572005
Delphi5.01
2006-05-14 06:00
2006.10.08
Работа с cookie в компоненте TWebBrowser (считывание, учтановка)


2-1158484364
dreamse
2006-09-17 13:12
2006.10.08
Ошибка в переборе компонентов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский