Руководство по созданию эффективных запросов



Download 17,08 Mb.
Pdf ko'rish
bet191/210
Sana25.06.2022
Hajmi17,08 Mb.
#704548
TuriРуководство
1   ...   187   188   189   190   191   192   193   194   ...   210
Bog'liq
OptimizZaprvPostgreSQL

о
Бновления
NORM может работать с любыми операциями манипулирования данными, 
то есть 
INSERT

UPDATE
и 
DELETE
, которые все вместе называются запросами на 
обновление.
Запрос на обновление отправляется из приложения в виде сложного объ-
екта и на уровне базы данных может привести к нескольким операциям 
обновления, применяемым к разным таблицам.
И снова разработка базы данных управляется контрактом. Функция базы 
данных получает объект JSON из приложения, разбирает его и интерпрети-
рует действия, которые требуются на уровне базы данных.
Вставка
Поскольку посадочный талон никогда не выдается в момент создания брони-
рования, функция, которая вставляет сегмент бронирования в базу данных, 
очень проста и вставляет строку только в одну таблицу, см. лис тинг 13.8.
Обновление
Для сегмента бронирования допустим лишь ограниченный набор обновлений, 
хоть он и представлен сложным объектом. В тех случаях, когда переброниро-
вание разрешено, можно изменить номер рейса в сегменте бронирования, но 
нельзя менять сам рейс – для этого предусмотрены другие функции. Кроме 


Обновления 

255
того, посадочные талоны всегда выдаются отдельно. Таким образом, в этом 
случае обновление ограничивается изменением номера рейса, выдачей по-
садочного талона или его удалением (обновить посадочный талон нельзя).
Чтобы объем кода оставался в пределах разумного, в лис тинге 13.9 пока-
зана функция обновления с ограниченной функциональностью.
Листинг 13.8 

Функция 
booking_leg_insert
CREATE OR REPLACE FUNCTION booking_leg_insert (p_object json)
RETURNS SETOF text
AS $body$
DECLARE
v_result booking_leg_record[];
v_sql text;
v_rec record;
v_booking_id int;
v_flight_id int;
v_leg_num int;
v_is_returning boolean;
v_booking_leg_id int;
BEGIN
FOR v_rec IN (SELECT * FROM json_each_text(p_object))
LOOP
CASE
WHEN v_rec.key = 'booking_id' THEN
v_booking_id := v_rec.value;
WHEN v_rec.key = 'flight_id' THEN
v_flight_id := v_rec.value;
WHEN v_rec.key = 'leg_num' THEN
v_leg_num := v_rec.value;
WHEN v_rec.key = 'is_returning' THEN
v_is_returning := v_rec.value;
ELSE
NULL;
END CASE;
END LOOP;
INSERT INTO booking_leg (
booking_id, flight_id, leg_num, is_returning, update_ts
) VALUES (
v_booking_id, v_flight_id, v_leg_num, v_is_returning, now()
)
RETURNING booking_leg_id INTO v_booking_leg_id;
RETURN QUERY (
SELECT * FROM array_transport(booking_leg_select_json(v_booking_leg_id))
);
END;
$body$
LANGUAGE plpgsql;



Download 17,08 Mb.

Do'stlaringiz bilan baham:
1   ...   187   188   189   190   191   192   193   194   ...   210




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