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


Download 0.9 Mb.
Pdf ko'rish
bet12/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

Основы PL/SQL
45
О п ер а то р
CALL 
использует ф разу 
INTO, 
когда р аб о тает с хр ан и м ы м и
ф ункциям и. Вы м ож ете о б ой ти сь без 
INTO, 
если р аб о таете с хр ан и м ы м и
процедурам и.
О сущ ествляя вы борку п ер ем ен н о й связи и з псевдотаблиц ы
DUAL, 
на­
п ри м ер , так
□ SELECT :session_var FROMdual;
вы получите
□ Hello World.
Д ля р азр аб о тч и к о в баз данны х ф ун кц ии п ред оставляю т огром н ы е 
возм ож н ости . И х м ож но вы зы вать как и з SQL, так и и з блоков P L /S Q L .
Процедуры
П роцедуры не могут бы ть п равы м операндом . К ром е того, вы не м ож ете 
и сп ол ьзовать их в п ред лож ен и ях SQL. Вы п ер ед аете дан ны е в хран и м ы е 
п роцедуры P L /S Q L и получаете дан н ы е оттуда посредством списка ф о р ­
м альны х п арам етров. К ак и в случае хран и м ы х ф ункций, вы м ож ете оп­
р ед ел ять л окал ьн ы е п рограм м ы и з и м ен ован н ы х блоков в секц ии об ъяв­
лен и й (d e claratio n section) процедур.
В от п р о то ти п для х р ан и м о й п роцедуры
□ PROCEDURE имя_процедуры
[(параметр1 [IN] [OUT] [N0C0PY] тип_данных_зд1 | тип_данных_р18д1
, параметр2 [IN] [OUT] [N0C0PY] тип_данных_зд1 | тип_данных_р1зд1
, параметр(п+1) [IN] [OUT] [N0C0PY] тип_данных_зд1 | тип_данных_р1эд1)
[AUTHID DEFINER | CURRENTJJSER] IS
операторы_объявлений
BEGIN
выполняемые_команды
[EXCEPTION]
команды_обработки_исключений 
END имя_процедуры;
/
Вы м ож ете о п ред елять процедуры , им ею щ ие и не им ею щ ие ф о рм аль­
н ы х п арам етров. Ф орм альн ы е п ар ам етр ы в хр ан и м ы х процедурах могут 
бы ть п ерем ен н ы м и , п ередаваем ы м и по зн ач ен и ю и ли по ссылке. П е р е ­
м енны е, п еред аваем ы е по ссылке, им ею т как реж им
IN, 
так и реж им
OUT. 
К ак и в случае ф ункций, если вы не задали реж им п арам етра, то п р и ге­
н ер и р о в а н и и п роцедуры п редполагается, ч то вы и м еете в виду передачу 
п ар ам етр а по значен ию .
В P L /S Q L п роцедуры не могут бы ть п равы м и оп еран дам и и н е могут 
бы ть вы зван ы напрямую и з п ред лож ен и й SQL. Следующ ий п р и м ер п ока­
зы вает хранимую процедуру, ко то р а я использует семантику п ер ед ач и па­
р ам етр а по ссы лке для заклю ч ен и я стр о к и в квад ратн ы е скобки:
□ — Найдено в format_string.sql на сайте издателя 
CREATE OR REPLACE PROCEDURE format_string


46
Глава 2
(string_in IN OUT VARCHAR2) IS 
BEGIN
String_in:-’{‘ ||string_in| ]’;
END;
/
К ром е того, вы м ож ете и сп ользовать о п ер ато р
CALL 
и п еред авать 
пе­
р ем ен н ы е в и и з п роцедуры . К ак и п р и в ед ен н ы й р ан ее п р и м ер ф ункции, 
э т о т п р и м ер использует о п е р а то р
CALL 
и перем енную связи:
□ VARIABLE session_var VARCHAR2(30)
CALL join_strings(‘Hello’, ‘World’) INTO :session_var;
CALL format_string(:session_var);
П е р вы й о п е р а то р
CALL 
вы зы вает введенную р ан ее ф ункцию и п ри сва­
и вает зн ач ен и е п ер ем ен н о й :session_var. Вы долж ны о б р ати ть вним ание, 
ч то в то р о й о п ер ато р
CALL 
не использует 
INTO 
п р и п ер ед ач е п ар ам етр а 
в и 
и з х р ан и м о й процедуры . В этом отл и чи е о т способа раб о ты хран и м ы х 
функций.
К ром е того, вы м ож ете и сп ол ьзовать о п ер ато р
EXECUTE 
п р и р аб оте 
с 
хран и м ы м и процедурам и. Следующ ий п р и м ер работает, как и о п ер ато р
CALL:
□ EXECUTE format_string(:session_var);
Если вы осущ ествите вы борку п ер ем ен н о й связи и з псевдотаблицы
DUAL
□ SELECT :session_var FROMdual;
то получите

[Hello World.]
если то лько вы не запустили н а вы п о л н ен и е оба п ри м ер а, и н аче вы 
увидите д вой н ы е скобки

[[Hello World.]]
П роц едуры предлагаю т п р и м ен ять ф ор м альн ы е п ар ам етр ы , п еред а­
ваем ы е по зн ач ен и ю и по ссылке. К ак вы увидите в главах 6 и 16, х р ан и ­
м ы е п роцедуры п озволяю т осущ ествлять обм ен дан ны м и с внеш ним и 
п р и л о ж е н и я м и .
Пакеты
П акеты являю тся базовой ко н ц еп ц и ей хр ан и м ы х п рограм м в O racle l l g .
О н и р аб отаю т как б и б л и отеки и со сто ят и з ф ун кц ий и процедур. В отли­
ч и е о т обособ лен н ы х ф ункций и процедур, п акеты п озвол яю т вам созда­
вать зам ещ аем ы е (overloaded) ф ункции и процедуры . В Главе 9 рассм ат­
р и ваю тся эти возм ож н ости пакетов.
П акеты использую т публикацию сп ец и ф и к ац и й . Такие сп ец и ф и к а­
ц и и обходят о гр ан и ч е н и е одноп р оход н ого ко м п и л ято р а (single p arser),


Основы PL/SQL
47
потому ч то все ф ункции и п роцедуры опубликованы . П убликация р аб о ­
тае т подобн о ссылкам вперед (forw ard re fere n cin g ), п ри м ен яем ы м в л о ­
кальны х ф ункциях и процедурах. Тела п акетов (package body) содерж ат 
ск ры ты е д етали ф ункций и процедур, а не их задан н ы е сигнатуры .
Тела п акетов долж ны содерж ать копию сигнатур ф ункций и п р о ц е­
дур, о п ред елен н ы х в сп ец и ф и к ац и я х пакетов. К р ом е того, тел а пакетов 
могут содерж ать оп р ед ел ен н ы е локальн о ти пы , ф ункции и процедуры . 
Э ти структуры доступны только внутри тел пакетов. О н и ан алог к он ц еп ­
ц и и п ерем ен н ы х частн ого доступа, им ею щ ихся в других со врем ен ны х 
язы ках п ро гр ам м и р о в ан и я, таких, как C++ и Java.

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