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



Download 17,08 Mb.
Pdf ko'rish
bet152/210
Sana25.06.2022
Hajmi17,08 Mb.
#704548
TuriРуководство
1   ...   148   149   150   151   152   153   154   155   ...   210
Bog'liq
OptimizZaprvPostgreSQL

в
ыПолнение
 
функЦий
Чтобы выполнить функцию, мы используем команду 
SELECT
. В лис тинге 11.8 
показаны два способа выполнения функции 
num_passengers
с параметром 
p_
flight_id
, равным 13.
Листинг 11.8 

Выполнение функции
SELECT num_passengers(13);
SELECT * FROM num_passengers(13);


Выполнение функций 

199
Для функций, возвращающих скалярные значения, любой синтаксис даст 
идентичные результаты. Сложные типы рассматриваются позже в этой главе.
Также стоит отметить, что определяемые пользователем скалярные функ-
ции могут использоваться в запросах точно так же, как и встроенные функ-
ции. Вспомните функцию 
text_to_numeric
из лис тинга 11.3. Вы можете спро-
сить, зачем создавать пользовательскую функцию преобразования, когда 
в PostgreSQL уже есть три разных способа преобразовать строку в целое чис-
ло. Для справки, вот эти три способа:
 

CAST
(text_value
AS
numeric)
;
 

text_value::numeric
– альтернативный синтаксис для 
CAST
;
 

to_number(text_value,
'999999999999')
– с использованием встроенной 
функции.
Зачем нужна еще одна функция преобразования? Для любого из методов, 
перечисленных в предыдущем списке, попытка преобразования приводит 
к ошибке, если входная текстовая строка содержит символы, отличные от тех, 
что могут встречаться в числах.
Чтобы функция преобразования не завершалась ошибкой, мы включаем 
в тело функции 
раздел
обработки
исключений
. Раздел начинается с ключево-
го слова 
EXCEPTION
; ключевое слово 
WHEN
может указывать конкретные типы 
исключений. В этой главе мы будем использовать его только в форме 
WHEN
OTHERS
, что соответствует всем типам исключений, не включенным в пре-
дыдущие условия 
WHEN
. Если, как в лис тинге 11.3, конструкция 
WHEN
OTHERS
используется сама по себе, это означает, что все исключения должны обра-
батываться одинаково.
В лис тинге 11.3 при ошибке преобразования (фактически при любой 
ошибке) функция не завершится аварийно, а вернет неопределенное значе-
ние. Почему так важно, чтобы не происходил сбой, когда функции передается 
«плохой» параметр? Потому что она используется в списке 
SELECT
.
В главе 7 мы создали материализованное представление 
passenger_pass-
port
(см. лис тинг 7.11). Различные столбцы этого материализованного пред-
ставления должны содержать значения разных типов данных, но поскольку 
в исходных данных все эти поля являются текстовыми, мы мало что можем 
сделать. Если вы хотите выбрать номер паспорта как числовое значение, ваш 
код может выглядеть так:
SELECT passenger_id,
passport_num::numeric AS passport_number
FROM passenger_passport
Если хотя бы в одной строке столбец 
passport_num
содержит нечисловое 
значение (например, пробел или пустую строку), то весь запрос завершит-
ся ошибкой. Вместо этого можно использовать созданную нами функцию 
text_to_integer
:
SELECT passenger_id,
text_to_numeric(passport_num) AS passport_number
FROM passenger_passport
Создадим еще одну пользовательскую функцию, 
text_to_date
, которая пре-
образует строку, содержащую дату, в тип 
date
, см. лис тинг 11.9.



Download 17,08 Mb.

Do'stlaringiz bilan baham:
1   ...   148   149   150   151   152   153   154   155   ...   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