Ю тся следую щие вопросы : ■ Структура блоков я зы к а o racle p L /s q L


Хранимые функции, процедуры и пакеты


Download 0.9 Mb.
Pdf ko'rish
bet11/14
Sana07.03.2023
Hajmi0.9 Mb.
#1246661
1   ...   6   7   8   9   10   11   12   13   14
Bog'liq
Майкл Мак-Локлин - Oracle DB 11g. Программирование на языке PL-SQL - 2014 better 51-73

43
Хранимые функции, процедуры и пакеты
Х рани м ы е п рограм м н ы е ед и н и ц ы P L /S Q L об ы ч н о явл яю тся ф ун кц ия­
ми, процедурам и, п акетам и и три ггерам и . К ро м е того, вы м ож ете со хра­
н ять о б ъ ек тн ы е ти п ы , но это р ассм атри вается в Главе 14.
O racle п одд ерж и вает ун икальн ы й сп и сок им ен хран и м ы х объектов 
для таблиц, п ред ставл ен и й , п ослед овател ьн о стей , хран и м ы х програм м
и типов. Э то т сп и сок и звестен как п р о стр ан ств о имен. В нем находятся 
ф ункции, п роцедуры , п акеты и объекты . В отдельном п р о стр ан ств е им ен 
х р ан ятся три ггеры .
Х рани м ы е ф ункции, п роцедуры и п акеты п о зво л яю т скры ть детали
п рограм м н ого кода в п рограм м н ы х единицах. К ром е того, он и п о зво л я­
ю т п р о и зв о д и ть упаковку п рограм м н ого кода для п р ед о твр ащ ен и я их от 
неж елательн о го п р о см о тр а н а уровне сервера.
Хранимые функции
Х рани м ы е ф ун кц ии явл яю тся удобны ми структурами, потому ч то вы мо- 
ж ете вы зы вать их напрямую и з п ред лож ен и й SQL и ли из програм м P L /
SQL. Все х ран и м ы е ф ун кц ии долж ны возвращ ать зн ач ен и е. К р о м е того, 
вы м ож ете и сп ользовать их в качестве п равого о п еран д а потому, что он и
возвращ аю т результат. Ф ункции оп ред ел яю тся в локальн ом блоке об ъяв­
лен и й (local d ec la ratio n block) и ли в базе данны х. В от п р о то ти п х р ан и ­
м ой функции:
□ FUNCTION имя_функции
[(параметр1 [IN] [OUT][NOCOPY] тип_данных_зд1 | Ti/m_flaHHbix_plsql 
[, параметр2 [IN] [OUT][NOCOPY] Tnn_flaHHbix_sql | т nn_flaHHbix_plsql 
[, параметр(п+1) [IN] [0UT][N0C0PY] Tnn_flaHHbix_sql | тип_данных_ 
plsql)]]]
RETURN [TMn_flaHHbix_sql | тип_данных_р1эд1]
[AUTHID [DEFINER | CURRENTJJSER]]
[DETERMINISTIC | PARALLEL_ENABLED]
[PIPELINED]
[RESULT_CACHE [RELIES ON имя_таблицы ]] IS
операторы_объявлений
BEGIN
выполняемые_команды 
RETURN переменная;
[EXCEPTION]
команды_обработки_исключений 
END [имя функции];
/
В P L /S Q L ф ункции могут п р и м ен яться в качестве п равы х операндов. 
К ром е того, вы м ож ете вы зы вать их напрямую и з п р ед ло ж ен и й SQL, 
п р и условии, ч то о н и возвращ аю т дан ны е ти п о в, допустим ы х в SQL. 
П роцедуры не могут бы ть п равы м и операндам и. И вы не м ож ете вы зы ­
вать их и з п ред лож ен и й SQL.


44
Глава 2
Вы м ож ете зап раш и вать ф ункцию , к о то р а я возвр ащ ает ти п данны х 
SQL, и з псевдотаблиц ы DUAL, используя следую щ ий п р ото ти п :
□ SELECT некоторая_функция [(фактический_параметр1, фактический_пара- 
метр2)]
FROMdual;
Вы более не о гр ан и ч ен ы в SQ L возм ож н остью п еред авать ф ак ти ч ес­
ки е п ар ам етр ы в п ор яд ке их расп о лож ен и я. Э то означает, что вы м ож е­
те и сп ользовать в SQL н отац и ю по и м ен и , как и в P L /S Q L . В Главе 6 рас­
см атри вается, как р аб отаю т н о тац и я по им ен и , н о тац и я по п о зи ц и и и 
см еш анная н отац и я.
В следующем п р и м ер е п р и в о д и тся п р о то т и п с н о тац и ей по и м ен и для 
вы зо ва ф ун кц ии P L /S Q L и з псевдотаблиц ы DUAL:
П SELECT некоторая_функция [(формальный_параметр=> фактический_параметр)] 
FROMdual;
В ы зовы с и сп ол ьзован и ем н о тац и и по и м ен и р аб отаю т э ф ф ек ти в н ее, 
когда для остальн ы х п ар ам етр о в существуют зн ач ен и я по умолчанию . Н е 
и м еет см ы сла указы вать то льк о часть п ар ам етр ов, если это п р и в ед ет к 
ош ибке п р и вы зове. Ф орм альн ы е п ар ам етр ы являю тся .необязательны ­
ми. В ы зовы с и сп ол ьзован и ем н о тац и и по им енам раб о таю т лучш е с фун­
кц и ям и и процедурам и, у к о то р ы х и м ею тся н ео б язател ьн ы е п арам етры .
К ром е того, вы м ож ете и сп ол ьзовать о п е р а то р
CALL 
для п ер ед ач и воз­
вращ аем ого ф ун кц ией зн ач ен и я п ер ем ен н о й связи. В от п р о то ти п для 
о п е р а т о р а
CALL:
□ CALL некоторая_функциях [(фактический_параметр1, фактический_пара- 
метр2)]
INTO некоторая_переменная_связи_сеанса;
Вот п р и м ер ф ункции, к о то р а я осущ ествляет кон катен ац ию двух 
стр о к в одну:
□ — Найдено в join_strings.sql на сайте издателя 
CREATE OR REPLACE FUNCTION join_strings 
(stringl VARCHAR2
, string2 VARCHAR2) RETURN VARCHAR2 IS 
BEGIN
RETURN stringl||’ ‘||string2||’.’;
END;
/
Т еп ерь вы м ож ете вы звать эту ф ункцию в SQL:
П SELECT join_strings(‘Hello’,’World’) FROMdual;
А н алогично, вы м ож ете оп р ед ел и ть п ерем енную связи уровня сеанса, 
а п отом и сп ол ьзовать о п ер ато р CALL, ч то бы п р и сво и ть это зн ач ен и е пе­
рем ен н о й связи уровня сеанса:
□ VARIABLE session_var VARCHAR2(30)
CALL join_strings(‘Hello’,’World’) INTO :session_var;



Download 0.9 Mb.

Do'stlaringiz bilan baham:
1   ...   6   7   8   9   10   11   12   13   14




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