Oracle для профессионалов Том Кайт торгово-издательский дом DiaSoft


create table id_table (id_name varchar(30), id_value number)



Download 0,99 Mb.
Pdf ko'rish
bet67/93
Sana16.03.2022
Hajmi0,99 Mb.
#495509
1   ...   63   64   65   66   67   68   69   70   ...   93
Bog'liq
tom kait oracle dlia professionalov[0001-0091]

create table id_table (id_name varchar(30), id_value number);
insert into id_table values ('MY_KEY', О) ;
Затем для получения нового ключа необходимо выполнить следующий код:
update id_table set id_value = id_value + 1 where id_name = 'MY_KEY';
select id_value from id_table where id_name = 'MY_KEY';
Выглядит он весьма просто, но выполнять подобную транзакцию в каждый момент
времени может только один пользователь. Необходимо изменить соответствующую стро-
ку, чтобы увеличить значение счетчика, а это приведет к поочередному выполнению опе-
раций. Не более одного сеанса в каждый момент времени будет генерировать новое зна-


Разработка успешных приложений для Oracle
чение ключа. Проблема осложняется тем, что реальные транзакции намного больше тран-
закции, показанной выше. Показанные в примере операторы UPDATE и SELECT —
лишь два из множества операторов, входящих в транзакцию. Необходимо еще вставить
в таблицу строку с только что сгенерированным ключом и выполнить необходимые дей-
ствия для завершения транзакции. Это упорядочение доступа будет огромным ограни-
чивающим фактором для масштабирования. Подумайте о последствиях, если этот ме-
тод применить для генерации номеров заказов в приложении для обработки заказов на
Web-сайте. Одновременная работа нескольких пользователей станет невозможной, — зака-
зы будут обрабатываться последовательно.
Правильное решение этой проблемы состоит в использовании для каждой СУБД со-
ответствующего кода. В Oracle (предполагается, что уникальный ключ необходимо ге-
нерировать для таблицы Т) лучшим способом будет:
create table t (pk number primary key, . . . ) ;
create sequence t_seq;
create trigger t_trigger before insert on t for each row
begin
select t_seq.nextval into :new.pk from dual;
end;
В результате каждая вставляемая строка автоматически и незаметно для приложения
получит уникальный ключ. Тот же эффект можно получить и в других СУБД с помо-
щью их типов данных — синтаксис оператора создания таблицы изменится, а результат
будет тем же. Мы использовали второй вариант — специфические средства каждой СУБД
для
 неблокируемой,
высокопараллельной генерации уникального ключа, что, однако, не
потребовало реальных изменений в коде приложения — все необходимые действия вы-
полнены операторами ЯОД.
Приведу еще один пример безопасного программирования, обеспечивающего пере-
носимость. Если понятно, что

Download 0,99 Mb.

Do'stlaringiz bilan baham:
1   ...   63   64   65   66   67   68   69   70   ...   93




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish