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

Как да използвате Decode в Oracle

Въведение в Oracle sql декодирането

В този раздел ще обсъдим обработката на декодиране на Oracle, която е много важен аспект на оператора Oracle sql

Oracle декодирането е методът в базата данни на Oracle за трансформиране на стойности на данни от една стойност в друга, която е по-добре за разбиране. Oracle Decode преобразува стойностите на данните по време на извличане.

Това е вид Ако тогава друго за обработка

Кодовият блок за Oracle sql Decode е по-долу

декодиране(име на израз или колона, съвпадение, резултат [,съвпадение, резултат]…[,по подразбиране] )

Ето значението на термините в горния код
a) израз или колона  е стойността за сравнение
b) съвпадението е стойността, която се сравнява с израза
c) резултатът е върнатата стойност, ако изразът е равен на съвпадение
d) по подразбиране е по избор. Ако не бъдат намерени съвпадения, декодирането ще върне по подразбиране. Ако по подразбиране е пропуснато, операторът за декодиране ще върне NULL (няма намерени съвпадения).

Пример

изберете
декодиране (
Код на фаза,
„P“, „Предстоящо“,
„C“, „Завършено“,
„T“,“ Прекратено',
'S','Режим готовност',
'НЕИЗВЕСТНО'
)
от
FND_REQUESTS;

Ето алгоритъмът за по-добро разбиране

1) Oracle извлича  стойността на колоната на фазовия код
2) ако кодът на фазата ='P' , тогава изчакващ
3) ако кодът на фазата ='C' , тогава Завършен
4) ако кодът на фазата ='T'  след това прекратено
5) ако Phase code ='S' , тогава Standby
6) Ако кодът на фазата не е нито едно от горните, декодирането връща Unknown
7) Ако не е налице по подразбиране ще даде нула

Имайте предвид, че декодирането на Oracle започва с посочване на името на колоната или израза, последвано от набор от съвпадащи двойки стойности на трансформация. В края на оператора за декодиране намираме стойност по подразбиране. Стойността по подразбиране казва на декодирането какво да се показва, ако стойностите на колона не са в сдвоения списък.

Бихме могли да кажем алгоритъма по този начин

if (expr ==търсене1)
return(result1);
elseif (expr ==search2)
return( резултат2);
…elseif (expr ==търсенеn)
връщане(резултат);
друго
връщане (по подразбиране);

Още няколко точки, които трябва да запомните за Oracle Decode

1) Във функция DECODE Oracle счита две нули за еквивалентни. Ако expr е нула, тогава Oracle връща резултата от първото търсене, който също е нулев.

SQL> SELECT decode(null,null,1,0) FROM dual;
DECODE(NULL,NULL,1,0)
————————
1

2) Максималният брой компоненти във функцията DECODE, включително expr, търсения, резултати и подразбиране, е 255.

3) Oracle автоматично преобразува стойностите за израз и сравнителна_стойност към типа данни на първата сравнителна_стойност. Също така типът данни на return_value се преобразува в типа данни на първата return_value. Ако първият резултат има тип данни CHAR или ако първият резултат е нулев, тогава Oracle преобразува върнатата стойност в типа данни VARCHAR2

Как да чета декодиране в Oracle

можем да прочетем израза за декодиране като израз if-else. Първият аргумент в израза за декодиране обикновено ще бъде някаква колона, където е необходима трансформация на данни. Аргументът след това ще сравнява стойностите на първия аргумент с него

Често задавани въпроси относно обработката на Oracle sql Decode

(1) Видяхме, че „expr“ се приравнява на определени стойности. Можем ли да използваме оператори за неравенство като> или

Да вземем пример
ИЗБЕРЕТЕ ДЕКОД(заплата,<50000, sal + 1000, sal + 500) Final_salary FROM emp;
ГРЕШКА на ред 2
ORA-00936:липсващ израз
Така че не можем да използваме това. Трябва да използваме изявление за case, за да го направим. или можем да подпишем функция в декодиране  за да го постигнем
ИЗБЕРЕТЕ ДЕКОДИРОВАНИЕ(знак(заплата- 50000), -1,sal + 1000, sal + 500) Final_salary FROM emp;
По принцип трябва да преобразуваме нашите изискване към някаква формула, която може да се оцени до някаква стойност

(2)Как да сравним стойностите на две колони с помощта на декодиране на Oracle?

ИЗБЕРЕТЕ col1,col2 decode( abs(col1-col2), 0, ‘col1 =col2’,Col1-col2, ‘col1> col2′,’col1 FROM example_tab;

(3) Каква е разликата между декодиране и CASE

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

(4) Има ли ограничение за декодирането на Oracle

Да Максималният брой компоненти във функцията DECODE, включително expr, търсения, резултати и подразбиране, е 255.

Сродни връзки
Документация на Oracle за декодиране
как да пишем sql заявки
Основно изявление на Sql
Изявление за случая на Oracle, обяснено със съвети и примери
урок за 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. Има ли PL/SQL прагма, подобна на DETERMINISTIC, но за обхвата на един единствен SQL SELECT?

  2. RR срещу YY в Oracle

  3. Някой знае ли каква техника за криптиране използва JDeveloper/SQL Developer за запазване на идентификационни данни?

  4. PL/SQL има ли еквивалентен StringTokenizer на Java?

  5. Съхранени процедури на SQL Server от Oracle®