Oracle
 sql >> база данни >  >> RDS >> Oracle

Декларация на Oracle, обяснена със съвети и примери

Видяхме как работи обработката на Oracle Decode в предишната публикация

Обработка на Oracle sql декодиране

Сега нека видим обработката на изявления на Oracle Case

Изявление на Case в Oracle

Това е подобно на изявлението Decode. Базите данни преди Oracle 8.1.6 имаха само функцията DECODE. CASE беше въведен в Oracle 8.1.6 като стандартна, по-смислена и по-мощна функция.

Всичко, което DECODE може да направи, CASE също може. Въпреки това CASE може да направи много други неща, които DECODE не може. Ще разгледаме подробни примери в тази статия

Нека започнем със синтаксис на изявлението Case

CASE [expression]

when condition_1 then value_1
when condition_2 then value_2
when condition_2 then value_2
….

else value_n
end

изразът е по избор

Можем да разделим изявлението Case на две категории изявление за прост случай и изявление за случай на търсене

Изявлението за прост case е точно като функцията за декодиране.

Пример с прост израз CASE

select
case
region
when ‘N’ then ’North’
when ‘S’ then ’South’
when ‘E’ then ’East’,
when ‘W’ then ’West’
else ‘UNKNOWN’
end
from
customer;

Изявление Case с възможност за търсене е изявление за case, където указваме условие или предикат (изявление за case в oracle с множество условия)

SQL> select emp_name
, case
when Salary < 10000
then 'Junior Level'
when (Salary >=10000 and Salary < 50000)
then 'Middle Level'
when (Salary >= 50000 and Salary < 100000)
then 'Senior Level'
else 'Managers'
end Emp_level
from employee_info
where rownum < 5;

EMP_NAME EMP_LEVEL
---------- ---------
JOHN Junior Level
DON Senior Level
BOB Manager
BILL Middle Level

Изявление за вложен случай на Oracle

Това е изявление на случая в изявлението на случая

SQL> select emp_name
, case
when Salary < 10000
then 'Junior Level'
when (Salary >=10000 and Salary < 50000)
then 'Middle Level'
when (Salary >= 50000 and Salary < 100000)
then 'Senior Level'
else  (Case when grade ='20'  then 'Vice President'
when grade='21'  then 'Senior Vice President'
else 'Manager'
End)
end Emp_level
from employee_info
where rownum < 5;

Важни моменти относно прост и търсещ изявление за Case

(1) Търсеният CASE оценява условията независимо при всяка от опциите „кога”. С тази структура далеч по-сложни условия могат да бъдат реализирани с търсен CASE от обикновен CASE.

(2) Търсен CASE може да комбинира множество тестове, използвайки няколко колони, сравнения и оператори И/ИЛИ.

(3) Както прости, така и търсени конструкции CASE, условията се оценяват последователно отгоре надолу и се намират изходи от изпълнението след първото съвпадение. Така че, да предположим, че е вярно повече от едно условие, разглежда се само първото действие.

(4) Oracle Database използва оценка на късо съединение. Тоест, за прост CASE израз, базата данни оценява всяка стойност на сравнение_expr само преди да я сравни с израза, вместо да оценява всички стойности на сравнение_израз, преди да сравни която и да е от тях с expr. Следователно Oracle никога не оценява сравнение_expr, ако предишно сравнение_изразване е равно на expr. За търсен CASE израз базата данни оценява всяко условие, за да определи дали е вярно, и никога не оценява условие, ако предишното условие е било вярно

Сега нека видим разликата между изявлението Case и Decode

(1) DECODE може да работи само със скаларни стойности, но CASE може да работи с логически оператори, предикати и подзаявки за търсене.

Знаем, че декодирането може да работи със скаларни стойности. Не можем да го използваме за логически оператори. Трябва да го преобразуваме в скаларни стойности, за да се възползваме от това.

Кейсът улеснява целия процес. Можем лесно да използваме логически оператор в изявлението Case

SQL> select city
, case
when population < 100000
then 'Tier I'
when (population >=100000 and population < 200000)
then 'Tier II'
when (population >= 200000 and population < 300000)
then 'Tier III'
else 'TIER IV'
end City_Tier
from city_info
where rownum < 5;

CITY CITY_TIER
---------- ---------
XYX TIER I
XYZ TIER II
XZW TIER II

Горното се нарича изявления на Case с възможност за търсене

(2) CASE може да работи като PL/SQL конструкция, но DECODE се използва само в SQL изрази. CASE може да се използва като параметър на функция/процедура.

Пример

DECLARE

V_x VARCHAR2(10) := 'A';
V_y VARCHAR2(10);

BEGIN

V_y := CASE V_x
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Good'
WHEN 'C' Then 'Average'
ELSE 'Poor'
END;

DBMS_OUTPUT.PUT_LINE(
'Grade V_x is '||V_y||'.'
);

END;
/

Оценка V_x е отлична.

(3) CASE очаква последователност на типа данни, DECODE не.

select case 5 when 1 then '1'
2 when '2' then '2'
3 else '5'
4 end
5 from dual;
when '2' then '2'
*
ERROR at line 2:
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

(4) CASE отговаря на ANSI SQL. DECODE е собственост на Oracle.

(5) CASE се изпълнява по-бързо в оптимизатора, отколкото DECODE.

(6) CASE е израз, докато DECODE е функция.

Сродни статии
Уроци за Oracle sql :Списък на всички уроци за sql, които могат да се използват за овладяване на sql и използване в управление и манипулиране на данни в RDBMS (Oracle,MySql)
Въпроси за интервю за Oracle:Вижте тази страница за Топ 49 Въпроси и отговори на Oracle Interview:Основи, Oracle SQL, за да ви помогне при интервюта.
oracle PLSQL записи:Вижте тази статия за работата на Oracle PLSQL записи. Освен това, разберете различните начини да го дефинирате и да му присвоите стойност
Инструмент за разработчици на Oracle SQL:Вижте тази страница за цялата информация относно инструмента за разработчици на Oracle sql, как да изтеглите Oracle sql програмист, как да инсталирате
Функции за дата на оракула :Вижте тази публикация за функциите на датата на оракула, разликата в датата на оракула в години, разликата в датата на оракула в дни, разликата в датата на оракула в месеци.
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expressions004.htm

Препоръчани курсове

Ето хубавия курс на Udemy за Oracle SQL
Oracle-Sql-Step-by-step :Този курс обхваща основния sql, присъединяването, Създаването на таблици и промяната на структурата им, Създаване на изглед, Обединение, Обединение - всичко и много други неща . Страхотен курс и задължителен курс за SQL начинаещи
Пълният курс за сертифициране на Oracle SQL :Това е добър курс за всеки, който иска да бъде готов за работа за SQL разработчици. Приятно обяснен курс
Oracle SQL Developer:Основни неща, съвети и трикове :Инструментът за разработчици на Oracle Sql се използва от много разработчици. Този курс ни дава трикове и уроци за това как ефективно да го използваме и да станем продуктивен sql разработчик
Майсторски клас за настройка на производителността на Oracle 2020 г. :Настройката на производителността е едно от критичните и най-търсените умения. Това е добър курс, за да научите за него и да започнете да правите настройка на производителността на sql


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Подзаявката на Oracle не вижда променливата от външния блок 2 нива нагоре

  2. Oracle динамичен DESC и ASC в ред по

  3. празен низ в oracle

  4. Защо Oracle.ManagedDataAccess не работи, когато Oracle.DataAccess го прави?

  5. Как да създадете PL/SQL съхранени процедури без параметри в базата данни на Oracle