Ю тся следую щие вопросы : ■ Структура блоков я зы к а 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
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; / |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling