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


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

Примечание 
Вы можете проверить, является ли значение типа 
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:
1   2   3   4   5   6   7   8   9   ...   14




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