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


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

Основы PL/SQL
31
BEGIN 
NULL;
END;
/
Вы долж ны о п ред ели ть перем енную SQ D Tlus 
SERVEROUTPUT 
для того, 
ч тобы о то б р ази ть содерж им ое п еч ати на консоль. H ello_w orld.sql п еч а­
тае т сообщ ени е н а консоль:
□ — Найдено в hello_world.sql на сайте издателя.
SET SERVEROUTPUT ON SIZE 1000000
BEGIN
dbms_output.PUT_LINE(‘Здравствуй, мир’);
END;
/
П ер ем ен н ая окруж ен ия S Q H P lus 
SERVEROUTPUT 
откр ы в ает буфер, a 
ф ункция 
DBMS_0UTPUT. PUT_LINE(
) п еч атае т строку вывода. Все об ъявлен и я, 
о п ер ато р ы и блоки заверш аю тся то ч к о й с зап ятой .
Примечание 
Каждый блок PL/SQL должен содержать что-нибудь, по меньшей .мере опера­
тор 
NULL;, 
иначе будет сгенерирована ошибка времени компиляции, также известная, как 
ошибка времени разбора (парсинга).
S Q H P lus п р и р аб о те с и н те р ак ти в н о й консолью п одд ерж ивает и с­
по льзован и е п ер ем ен н ы х подстан овки, ко то р ы е н ач и н аю тся с &. П е р е ­
м енн ы е подстан овки являю тся строкам и п ер ем ен н о й дли н ы и ли числа­
ми. Вы никогда не долж ны п ри сваи вать зн ач ен и я дин ам ическим п е р е ­
м енны м (п ерем ен н ы м подстан овки) в блоке объявлен и й.
Следующая п рограм м а о п р ед ел яет перем енную и п ри сваи в ает ей зн а­
чение:
□ — Найдено в substitution.sql на сайте издателя.
DECLARE
my_var VARCHAR2(30);
BEGIN
my_var:-’&input’;
dbms_output.PUT_LINE(‘Здравствуй’||my_var);
END;
/
О п ер ато р о м п р и с в о е н и я в P L /S Q L будет ко м би н ац и я и з д во ето ч и я и 
зн ака р ав ен ств о (:-). С троковы е кон стан ты (ли тералы ) огран и чи ваю тся 
од и н арн ы м и кавы чкам и. В Главе 3 рассм атриваю тся ко н стан ты ти п ов да­
та, чи словы е и строковы е.
Вы м ож ете запускать н а вы п о л н ен и я ан о н и м н ы е блоки, вы зы вая их 
из O racle SQ H Plus. С им вол @ п о зво л я ет в O racle S Q H P lus загрузить и за­
пустить н а вы п о л н ен и е ф ай л скрипта. Р асш ирени ем по умолчанию яв л я­
ется .sql, но вы м ож ете п ер ео п р ед ел и ть другое расш и рен и е. Э то озн ач а­
ет, что вы м ож ете задать и м я ф ай л а без р асш и р ен и я .sql.


32
Гпава 2
Следующ ий п р и м ер дем он стри р ует вы зов ф ай л а substitution.sql:
□ SQL>@substitution.sql
Введите значение для input: Генри Водсворт Лонгфелло
old 3: my_var VARCHAR2(30): &input;
new 3: my_var VARCHAR2(30):-’Генри Водсворт Лонгфелло’;
Здравствуй Генри Водсворт Лонгфелло 
PL/SQL процедура успешно завершена.
С рока, начинаю щ аяся с old, обозначает место, в котором ваш а п р о ­
грамма п рои звод и т подмену (substitution), а начинаю щ аяся с new обозна­
ч ает подмену, которая п роизводится в м ом ент исполнения. П ри своен и е 
строковой константы , слиш ком дли н н ой для д анной перем ен ной , вы зо­
вет генерацию ош ибки. Появивш ую ся ошибку обрабаты вает блок обра­
ботки и склю чения (exception block). О бщ ий обработчи к ош ибок (generic 
exception h an d ler) об работает любую сгенерированную ошибку. Ч тобы об­
работать лю бое сгенери рован н ое исклю чение общ им обработчиком ош и­
бок (generic exception h an d ler), нужно использовать блок 
WHEN OTHERS.
Совет 
Вы можете подавить повторный вывод текста подмены на экран (эхо, echoing),
задав в SQ L*Plus VERIFY off. 
-
~
Следующая п рограм м а ex ception.sq l дем онстрирует, как блок об р аб о т­
ки и скл ю ч ен и й о б раб аты вает ошибку, если стро к а слиш ком дли н н ая для 
п ерем ен ной :
□ — Найдено в exception.sql на сайте издателя.
DECLARE
my_var VARCHAR2(10)
BEGIN
my_var:-’&input’
dbms_output.PUT_LINE(‘Здравствуй ‘||my_var);
EXCEPTION
WHEN others THEN
dbms_output.PUT_LINE(SQLERRM);
END;
/
В этом ан он им ном блоке д ли н а стро к и и зм ен ен а с 30 до 10 символов. 
И м я п о эта (Генри В одсворт Л он гф ел ло ) теп ер ь слиш ком дли н н ое, ч то ­
бы со ответствовать ц ел ево й п ерем ен н ой . П р и св о ен и е зн ач ен и я п ер е­
м ен н ой в ы зы вает ген ер ац и ю ош ибки. Вывод н а кон соль п оказы вает об­
р аб о тан н о е и сген е р и р о в ан н о е сообщ ени е об ош ибке:
□ SQL>@exception. sql
Введите значение для input: Генри Водсворт Лонгфелло
old 4: my_var:-’&input’ ;
new 4: my_var:-’Генри Водсворт Лонгфелло’;
0RA-06502: PL/SQL: числовая ошибка или ошибка значения: буфер символь­
ной строки слишком мал 
PL/SQL процедура успешно завершена.


Основы PL/SQL
33
К ром е того, у вас могут быть: (а) п рограм м ы и з влож ен ны х ан он им ­
ны х блоков в секц и и вы п ол н яем ы х ком анд (execu tio n) ан он и м н ого бло- 
ка; (Ь) п рограм м ы и з и м ен о ван н ы х блоков в секц и и о б ъявл ен и й
(d eclaratio n ), ко то р ы е могут содерж ать те ж е ти п ы вл ож ен ны х п ро грам ­
ма; (с) вы зовы хран и м ы х п рограм м из и м ен о ван н ы х блоков.
В неш ний п рограм м н ы й блок уп равляет и сп о л н ен и ем всей п р ограм ­
мы, а влож ен н ы е п рограм м н ы е блоки управляю т и сп о лн ен и ем п одчи ­
н ен н ы х им п рограм м . К аж дая п рограм м н ая единица, состоящ ая и з ан о­
н им ного и ли и м ен ован н ого блока, м ож ет содерж ать секцию и склю че­
н и й (exception). Если л окальн ы й о б р аб о тч и к ош ибок не м ож ет об р аб о­
тать ошибку, он п ер ед ает это и склю ч ен ие в блок более вы сокого уровня 
и так до тех п ор, п ока не будет достигнуто окруж ение SQ H Plus.
О б раб отка стека ош ибок од ин акова в случаях, когда ош ибка п ер ед ан а 
из вы зван н ы х л окальн о и и м ен ован н ы х блоков P L /S Q L . О ш ибка ген е­
ри руется и п ом ещ ается в очередь, работаю щ ую по п ри н ц и п у «первы й 
вош ел - п ослед н ий выш ел» (first-in, last-out), известную как стек.
Вы р ассм отрели осн овн ы е структуры п рогр ам м н ы х блоков P L /S Q L и 
обработку стека ош ибок. С труктура блоков яв л яется ф ундаментом п р и
раб о те в P L /S Q L .
Переменные, присвоения и операторы
К ти пам дан ны х в P L /S Q L о тн о сятся все ти п ы дан ны х SQL и подтипы 
п ер еч и сл ен н ы е в Таблице В-2 П р и л о ж ен и я В. В Главе 3 р ассм атриваю тся 
ти п ы данны х, сп ец и ф и ч еск и е для P L /S Q L . К ром е того, P L /S Q L подде­
рж и в ает скалярн ы е и составны е (com posite) п ер ем ен н ы е. С калярны е п е­
рем ен н ы е сод ерж ат только одну единицу и н ф о р м ац и и , а составны е п е­
р ем ен н ы е сод ерж ат более одной ед и ни ц ы и н ф о р м ац и и . П реды дущ ие 
п рограм м ы п р о д ем о н стр и р о вал и вам, как об ъявл ять и п ри сваи вать зн а­
ч ен и я скалярн ы м п ерем ен ны м .
И м ена п ерем ен ны х н ачинаю тся с буквы и могут содерж ать алф ави т­
н ы е символы, ц и ф р ы (от 0 до 9) и символы $, _ и #. П ерем ен н ы е им ею т 
только локальны й диапазон видимости. Это означает, что он и доступны 
только в границах данного блока P L /S Q L . И склю чением из этого правила 
будут влож енны е анон им ны е блоки, ко тор ы е работаю т внутри определя­
ю щего их блока. С ледовательно, он и могут получать доступ к п ерем ен ­
ным, оп ределенны м в содерж ащ ем их блоке, если вы не п ереоп редели ли
то ж е самое им я п ерем ен н ой внутри влож енного аноним ного блока.
Если п р и об ъ явл ен и и ч и словой п ер ем ен н о й ей н е п р и сво ен о зн ач е­
ние, он а получает н ео п р ед ел ен н о е зн ач ен и е (n u ll). П р о т о ти п п оказы ва­
ет, что м ож но п р и сво и ть зн ач ен и е позж е, в блоке вы п олн яем ы х команд 
(execution):
□ DECLARE
имя_переменной NUMBER;
BEGIN
имя_переменной:-1;
END;
/



Download 0.9 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   14




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