Oracle PL / SQL: Заява з прикладами

Зміст:

Anonim

Що таке заява CASE?

Оператор CASE схожий на оператор IF-THEN-ELSIF, який вибирає одну альтернативу на основі умови з доступних варіантів.

  • У операторі CASE для вибору послідовності використовується "селектор", а не булевий вираз.
  • Значення виразу в операторі CASE буде розглядатися як селектор.
  • Вираз може бути будь-якого типу (арифметичний, змінні тощо)
  • Кожній альтернативі присвоюється певне заздалегідь визначене значення (селектор), а альтернатива зі значенням селектора, яке відповідає значенню умовного виразу, буде виконана.
  • На відміну від IF-THEN-ELSIF, вираз CASE також може використовуватися в операторах SQL.
  • Блок ELSE в операторі CASE містить послідовність, яку потрібно виконати, коли жодна з альтернатив не вибрана.

Синтаксис:

CASE (expression)WHEN  THEN action_blockl;WHEN  THEN action_block2;WHEN  THEN action_block3;ELSE action_block_default;END CASE;
  • У наведеному вище синтаксисі вираз поверне значення, яке може бути будь-якого типу (змінної, числа тощо).
  • Кожне речення 'WHEN' розглядається як альтернативи, які мають <значення> та .
  • Буде вибрано речення 'WHEN', яке відповідає значенню, як значення виразу, і буде виконано відповідний .
  • Блок 'ELSE' є необов'язковим, який містить , який потрібно виконати, коли жодна з альтернатив не відповідає значенню виразу.
  • "END" означає кінець виписки CASE, і вона є обов'язковою частиною CASE.

Приклад 1: Арифметичне обчислення з використанням регістру

У цьому прикладі ми будемо робити арифметичне обчислення між двома числами 55 і 5.

DECLAREa NUMBER :=55;b NUMBER :=5;arth_operation VARCHAR2(20) :='MULTIPLY’;BEGINdbms_output.put_line(‘Program started.' );CASE (arth_operation)WHEN ‘ADD’ THEN dbms_output.put_line(‘Addition of the numbers are: '|| a+b );WHEN ‘SUBTRACT' THEN dbms_output.put_line(‘Subtraction of the numbers are: '||a-b );WHEN ‘MULTIPLY' THEN dbms_output.put_line(‘Multiplication of the numbers are: '|| a*b);WHEN ‘DIVIDE' THEN dbms_output.put_line(‘Division of the numbers are:'|| a/b);ELSE dbms_output.put_line(‘No operation action defined. Invalid operation');END CASE;dbms_output.put_line(‘Program completed.' );END;/

Пояснення коду:

  • Рядок коду 2: Оголошення змінної 'a' як типу 'ЧИСЛО' та ініціалізація її значенням '55'.
  • Рядок коду 3: Оголошення змінної 'b' як типу 'ЧИСЛО' та ініціалізація її значенням '5.'
  • Рядок коду 4: Оголошення змінної 'arth_operation' як типу даних 'VARCHAR2' розміром 20 та ініціалізація її значенням 'MULTIPLY'.
  • Рядок коду 6: Друк виписки "Програма запущена".
  • Рядок коду 7: CASE перевіряє значення виразу. У цьому випадку значенням змінної 'arth_operation' є 'MULTIPLY'. Зараз це значення буде розглядатися як селектор для цього твердження CASE.
  • Рядок коду 10: Речення WHEN зі значенням “MULTIPLY” збігається зі значенням селектора, отже, контролер вибере цей action_block і виведе повідомлення “Множення чисел: 275”.
  • Кодовий рядок 13: Позначає кінець оператора CASE.
  • Код, рядок 14: Друк виписки "Програма виконана".

Вихід коду:

Program started.Multiplication of the numbers are: 275Program completed.

ПОШУКОВА СПРАВА Заява

Оператор SEARCHED CASE схожий на оператор CASE, а не за допомогою селектора для вибору альтернативи, SEARCHED CASE безпосередньо матиме вираз, визначений у реченні WHEN.

  • Перший пункт WHEN, який задовольняє умові, буде виконаний, а контролер пропустить інші альтернативи.

Синтаксис:

CASEWHEN  THEN action_blockl;WHEN  THEN action_block2;WHEN  THEN action_block3;ELSE action_block_default;END CASE;
  • У наведеному вище синтаксисі кожне речення WHEN має окремі та .
  • Буде виконано речення WHEN, для якого вираз повертає TRUE.
  • Блок 'ELSE' є необов'язковим, який містить , який потрібно виконати, коли жодна з альтернатив не задовольняє.
  • "END" означає кінець виписки CASE, і вона є обов'язковою частиною CASE.

Приклад 1: Арифметичне обчислення з використанням обшукуваного відмінка

У цьому прикладі ми будемо робити арифметичне обчислення між двома числами 55 і 5.

DECLARE a NUMBER :=55;b NUMBER :=5;arth_operation VARCHAR2(20) :='DIVIDE';BEGINdbms_output.put_line(‘Program started.' );CASEWHEN arth_operation = 'ADD'THEN dbms_output.put_line(‘Addition of the numbers are: '||a+b );WHEN arth_operation = ‘SUBTRACT'THEN dbms_output.put_line(‘Subtraction of the numbers are: '|| a-b);WHEN arth_operation = ‘MULTIPLY’THEN dbms_output.put_line(‘Multiplication of the numbers are: '|| a*b );WHEN arth_operation = ’DIVIDE'THEN dbms_output.put_line(‘Division of the numbers are: '|| a/b ):ELSE dbms_output.put_line(‘No operation action defined. Invalid operation');END CASE;dbms_output.put_line(‘Program completed.' );END;/

Пояснення коду:

  • Рядок коду 2: Оголошення змінної 'a' як типу 'ЧИСЛО' та ініціалізація її значенням '55'.
  • Рядок коду 3: Оголошення змінної 'b' як типу даних 'ЧИСЛО' та ініціалізація її значенням '5'.
  • Рядок коду 4: Оголошення змінної 'arth_operation' як типу даних 'VARCHAR2' розміром 20 та ініціалізація її значенням 'DIVIDE'.
  • Рядок коду 6: Друк виписки "Програма запущена".
  • Рядок коду 7: Починається оператор SEARCHED CASE. Код з рядка 8 в рядок 13 пропускається, оскільки значення їх селектора (ДОДАТИ, ВІДНІМИТИ, КНОЛЬКО) не збігається зі значенням 'arth_operation'.
  • Рядок коду 14: Вираз пропозиції WHEN "arth_operation = 'DIVIDE'" задоволений, і вираз повертає TRUE.
  • Рядок коду 15: Буде виконано Action_block речення WHEN, і буде надруковано повідомлення "Розділення чисел: 11".
  • Рядок коду 17: Позначає кінець оператора CASE.
  • Рядок коду 18: Друк виписки "Програма виконана".

Вихід коду:

Program started.Division of the numbers are: 11Program completed.

Резюме

ТИП ОПИС ВИКОРИСТАННЯ

СПРАВА

Подібно до твердження IF-THEN-ELSIF. 'SELECTOR' використовується для вибору альтернатив замість булевого виразу.

Використовується для вибору з декількох альтернатив за допомогою 'SELECTOR'

ШУКАНА СПРАВА

Оператор CASE без фактичного 'SELECTOR'. Натомість він містить фактичну умову (яка має значення TRUE / FALSE), яка вибере альтернативи.

Використовується для вибору з двох варіантів.