Ю тся следую щие вопросы : ■ Структура блоков я зы к а o racle p L /s q L
Download 0.9 Mb. Pdf ko'rish
|
Майкл Мак-Локлин - 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling