Ю тся следую щие вопросы : ■ Структура блоков я зы к а o racle p L /s q L
Download 0.9 Mb. Pdf ko'rish
|
Майкл Мак-Локлин - Oracle DB 11g. Программирование на языке PL-SQL - 2014 better 51-73
Примечание
Вы можете проверить, является ли значение типа BOOLEAN истиной (true), применяя оператора сравнения и константы (например, some_boolean=TRUE), но это не лучший путь для использования булевой переменной в операции сравнения. Н апри м ер, если вы используете оп ер ато р IF, чтобы определить, исти н а (true) ли н еи н и ц и ал и зи рован н ая п ерем ен ная ти п а B0LEAN, то это оп ре Основы PL/SQL 37 д еление дает отри ц ател ьн ы й результат и управление п ередается на блок ELSE. Н о если вы п р и м ен яете оп ер ато р IF NOT, чтобы для определить, будет ли н еи н и ц и ал и зи рован н ая п ерем ен н ая ти п а BOOLEAN лож ью (false), это оп ределен и е дает такж е отри ц ател ьн ы й результат и управление п ередается на блок ELSE. Это происходи т потому, что н еи ни ц и ал и зи ро ван н ая п ер е менная ти п а BOOLEAN не будет ни и сти н ой (true), ни лож ью (false). Р еш ить эту проблем у м ож но п р и м ен яя в SQL ф ункцию NVL(). О н а п оз во л яет зам ен ять н ео п р ед ел ен н о е зн ач ен и е (null) лю бой п ер ем ен н о й на задан н ое зн ач ен и е. В функцию NVL() п ер ед ается два п арам етра: п ер ем ен н ая и кон станта, к о то р а я м ож ет бы ть числовы м зн ач ен и ем , стр о к о й и ли кон стантой . О ба п ар ам етр а долж ны и м еть один и т о т ж е тип. Вы м ож ете естествен н ы м об разом получать доступ ко всем стандартн ы м ф ункциям SQL в ваш их п рограм м ах н а P L /S Q L . В следую щей п рограм м е д ем онс три руется, как м ож но и сп ол ьзовать NVL(), п р и м ен и тел ьн о к н еи н и ц и а л и зи р о в ан н о й п ер ем ен н о й ти п а BOOLEAN: □ -- Найдено в if_then.sql на сайте издателя. DECLARE -- Определяем булеву переменную. моя_переменная BOOLEAN; BEGIN — Используем функцию NVL для замены значения для сравнения. IF NOT NVL(M 0 4 _ n e p eM eH Ha n, FALSE) THEN dbms_output.PUT_LINE(‘Это должно было произойти!’); ELSE dbms_output.PUT_LINE(‘Об’’ясняем, почему это не должно произойти!’); END IF; END; / О п ер а то р IF NOT в о звр а ти т зн ач ен и е лож ь (false), если зн ач ен и е п е р ем ен н о й т и п а BOOLEAN не и н и ц и ал и зи р о в ан о . П реды дущ ая п рограм м а находит, ч то зн ач ен и е ф ун кц ии NVL() р авн о зн ач ен и ю лож ь (false) и ли не и сти н а (NOT t rue), и п еч атает следующее сообщ ение: □ Это должно было произойти!! Примечание В блоке ELSE вы видите применение дублирования кавычек в строке. Одиноч ная кавычка является зарезервированным символом для использования в качестве ограничи теля строк. Вы можете продублировать апостроф, используя другой апостроф, или одиноч ную кавычку, для введения его в закавыченную строку. Кроме того, вы можете заменить дуб лирующий символ (см. раздел, посвященной возможностям Oracle 10д). О п ер а то р if-then-elsif-then-else р аб о тает п одобно о п ер ато ру if- then-else, н о п о зво л я ет п р о и зв о д и ть н есколько ср авн ен и й вы п о л н ен и я условий в одном о п ер ато р е IF. Н и ж е п ри в о д и тся базовы й п р о т о ти п для блока P L /S Q L if-then-elsif-then-else: □ IF [NOT] левый_операнд1 > правый_операнд2 [AND | OR] NULL; ELSIF [NOT] левый_операнд1= правый_операнд1 [[AND | OR] 38 Глава 2 [NOT] левый_операнд2= правый_операнд2 [[AND | OR] [NOT] булев_операнд]] THEN NULL; ELSE NULL; END IF; 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