Гэр / Нийгмийн сүлжээ / Oracle nvl тайлбар. SELECT команд дахь салбар мэдэгдлүүд. EXP(n) ба LN(n) функцууд

Oracle nvl тайлбар. SELECT команд дахь салбар мэдэгдлүүд. EXP(n) ба LN(n) функцууд

NVL функц

NVL функц нь ерөнхийдөө хамгийн түгээмэл хэрэглэгддэг. Энэ функц нь NVL(expr1, expr2) гэсэн хоёр параметрийг хүлээн авдаг. Хэрэв эхний параметр expr1 нь NULL биш бол функц нь өөрийн утгыг буцаана. Хэрэв эхний параметр нь NULL бол функц нь оронд нь хоёрдахь параметрийн утгыг буцаана expr2.

Санаж үз практик жишээ. EMP хүснэгтийн COMM талбар нь NULL утгыг агуулж болно. Асуултыг гүйцэтгэх үед:

EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM-г СОНГОХ

SCOTT.EMP-с

NULL утгыг тэгээр солино. Хэрэв утгыг функц ашиглан үүсгэсэн бол түүнд өөр нэр оноосон гэдгийг анхаарна уу. Асуулгын үр дүн дараах байдлаар харагдах болно.

EMPNO ENAME COMM NVL_COMM
7369 СМИТ 0
7499 АЛЛЕН 300 300
7521 ТОРОГ 500 500
7566 ЖОНС 0
7654 МАРТИН 1400 1400
7698 БЛЕЙК 0
7782 КЛАРК 0
7839 ХААН 0
7844 ТОРЧИГЧ 0 0
7900 Жэймс 0
7902 FORD 0
7934 МИЛЛЕР 0

CEIL(n) функц

CEIL функц нь параметр болгон дамжуулсан n тооноос их буюу тэнцүү хамгийн бага бүхэл тоог буцаана. Жишээлбэл:

CEIL(100) X1, CEIL(-100) X2, CEIL(100.2) X3 , CEIL(-100.2) X4 СОНГОХ

DUAL-аас

TRUNC(n[,м])

TRUNC функц нь аравтын бутархайн m хүртэл таслагдсан n тоог буцаана. m параметрийг орхигдуулж болох бөгөөд энэ тохиолдолд n нь бүхэл тоогоор таслагдана.

SELECT TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRUNC(100.25678, 2) X4

DUAL-аас

SIGN(n) функц

SIGN функц нь тооны тэмдгийг тодорхойлдог. Хэрэв n эерэг бол функц 1-ийг буцаана. Хэрэв сөрөг бол -1-ийг буцаана. Хэрэв тэг бол 0-г буцаана.Жишээ нь:

СОНГОХ ТЭМД(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3

DUAL-аас

Энэ функцийн сонирхолтой онцлог нь m-ийг 0-д хуваах алдаагүйгээр тэгтэй тэнцүүлэх чадвар юм.

POWER(n, m) функц

POWER функц нь n тоог m хүртэл өсгөнө. Зэрэг нь бутархай ба сөрөг байж болох бөгөөд энэ нь энэ функцийн чадварыг ихээхэн өргөжүүлдэг.

POWER(10, 2) X1, POWER(100, 1/2) X2, СОНГОХ,

POWER(1000, 1/3) X3, POWER(1000, -1/3) X4

DUAL-аас

X1 X2 X3 X4
100 10 10 0,1

Зарим тохиолдолд энэ функцийг дуудах үед үл хамаарах зүйл тохиолдож болно. Жишээлбэл:

POWER СОНГОХ(-100, 1/2) X2

DUAL-аас

Энэ тохиолдолд сөрөг тооны квадрат язгуурыг тооцоолох оролдлого хийх бөгөөд энэ нь ORA-01428 "Аргумент мужаас гадуур" гэсэн алдаа гарах болно.

SQRT(n) функц

Энэ функц n-ийн квадрат язгуурыг буцаана. Жишээлбэл:

SQRT(100) X-г сонго

DUAL-аас

EXP(n) ба LN(n) функцууд

EXP функц нь e-г n-ийн чадал хүртэл өсгөж, LN функц нь n-ийн натурал логарифмыг тооцоолдог (n нь тэгээс их байх ёстой). Жишээ:

EXP(2) X1, LN(1) X2, LN(EXP(2)) X3 СОНГОХ

Тоонуудтай TO_CHAR функц

Өгөгдлийг өөр төрлийн өгөгдлийн хэлбэрт хөрвүүлэх функцууд. TO_CHAR(тоо) нь тоог текст болгон хувиргадаг. TO_NUMBER(мөр) нь текстийг тоо болгон хувиргадаг.

SELECT TO_CHAR (123) FROM DUAL нь 123 мөрийг, SELECT TO_NUMBER (`12345") FROM DUAL нь 12345 тоог буцаана.

Лабораторийн ажил. Гаралтын тоонуудын форматыг өөрчлөх

Oracle SQL-д тоон форматыг өөрчлөх, тоон утгуудтай ажиллахад зориулсан TO_CHAR функц.

Дасгал:

hr.employees хүснэгтээс ажилчдын нэр, овог, цалингийн талаарх мэдээллийг Зураг 1-т үзүүлсэн форматаар харуулсан асуулга бичнэ үү. 3.4-1:

Цагаан будаа. 3.4 -1

Үүний зэрэгцээ хамгийн өндөр цалинтай ажилчдын мөрийг эхлээд харуулах байдлаар өгөгдлийг эрэмбэлэх ёстой.

Жич:

Зураг дээрх зарим цалингийн утгууд. 3.4-1-ийг өөрчилсөн тул таны утгуудтай таарахгүй байж магадгүй.

Шийдэл:

овог_нэрээ "Овог нэрээр" СОНГОХ TO_CHAR(ЦАЛИН, "L999999999.99") "Цалин" гэж цаг.ажилтнуудаас ЦАЛИННИЙ ЗАХИАЛГААР ЗАХИАЛНА.

TO_NUMBER болон TO_DATE функцууд

TO_DATE-д мөрийг хөрвүүлэх функц (мөр, формат). Боломжит утгуудформатыг дээр аль хэдийн хэлэлцсэн тул би энэ функцийг ашиглах цөөн хэдэн жишээг өгөх болно. Жишээ нь:

СОНГОХ TO_DATE("01/01/2010", `DD.MM.YYYY") FROM DUAL нь `2010.01.01" огноог буцаана";

СОНГОХ TO_DATE("2010.01.01",`DD.DON.YYYY") FROM DUAL нь 2009.01.01-ний өдрийг буцаана";

СОНГОХ TO_DATE("15-01-10",`DD-MM-YY") FROM DUAL нь '01/15/2010' огноог буцаана.

Мөрийг TO_NUMBER тоон утга руу хөрвүүлэх функц (мөр, формат). Хамгийн түгээмэл форматын утгуудыг хүснэгтэд жагсаасан тул жишээнүүдийг ашиглан энэ функцийг ашиглах талаар авч үзье. Жишээ нь:

СОНГОХ TO_NUMBER(`100") FROM DUAL нь 100 SELECT TO_NUMBER тоог буцаана(`0010.01, "9999D99") FROM DUAL нь 10.01 гэсэн тоог буцаана;

СОНГОХ TO_NUMBER("500,000", "999G999") FROM DUAL нь 500000 тоог буцаана.

Огнооны форматтай RR элемент

RR огноо, цагийн форматын элемент нь YY огноо, цагийн форматын элементтэй төстэй боловч бусад зууны огнооны утгыг хадгалах нэмэлт уян хатан байдлыг хангадаг. RR datetime форматын элемент нь зөвхөн жилийн сүүлийн хоёр цифрийг зааж өгснөөр 21-р зуунд 20-р зууны огноог хадгалах боломжийг олгодог.

Хэрэв тухайн жилийн сүүлийн хоёр орон нь 00-ээс 49 хүртэл байвал буцаж ирсэн он нь тухайн жилийн эхний хоёр оронтой ижил байна.

Хэрэв тухайн жилийн сүүлийн хоёр орон 50-аас 99-ийн хооронд байвал буцаж ирсэн жилийн эхний 2 орон нь тухайн жилийн эхний 2 оронтой тооноос 1-ээр их байна.

Хэрэв тухайн жилийн сүүлийн хоёр орон нь 00-аас 49 хүртэл байвал буцаж ирсэн жилийн эхний 2 орон нь тухайн жилийн эхний 2 цифрээс 1-ээр бага байна.

Хэрэв тухайн жилийн сүүлийн хоёр орон 50-аас 99-ийн хооронд байвал буцаж ирсэн он нь тухайн жилийн эхний хоёр оронтой ижил байна.

NVL функц

NVL функц нь ерөнхийдөө хамгийн түгээмэл хэрэглэгддэг. Энэ функц нь NVL(expr1, expr2) гэсэн хоёр параметрийг хүлээн авдаг. Хэрэв эхний параметр expr1 нь NULL биш бол функц нь өөрийн утгыг буцаана. Хэрэв эхний параметр нь NULL бол функц нь оронд нь хоёр дахь параметрийн exp2 утгыг буцаана.

Жишээ: Нийлүүлэгчээс NVL (нийлүүлэгч_хот, байхгүй) сонгоно уу:

Хэрэв нийлүүлэгч_хотын талбарт байгаа бол дээрх SQL мэдэгдэл нь n/"-г буцаана тэг утга. Үгүй бол нийлүүлэгч_хотын утгыг буцаана.

Oracle/PLSQL дээр NVL функцийг ашиглах өөр нэг жишээ бол:

ханган нийлүүлэгчдээс нийлүүлэгчийн_id, NVL (нийлүүлэгчийн_тодорхой, нийлүүлэгчийн_нэр) сонгоно уу.

Энэ SQL мэдэгдэл буцах болно Нийлүүлэгчийн нэрталбар бол нийлүүлэгч_тодорхойлолтхоосон утгыг агуулна. Үгүй бол буцаж ирнэ нийлүүлэгч_тодорхойлолт.

Сүүлийн жишээ: Oracle/PLSQL дээр NVL функцийг ашиглах нь: борлуулалтаас NVL(commission, 0)-г сонгох;

Энэхүү SQL мэдэгдэл нь 0 if утгыг буцаалаа комиссталбар нь хоосон утгатай байна. Тэгэхгүй бол буцаж ирэх байсан комиссталбар.

Төрөл бүрийн өгөгдлийн төрлүүдэд зориулсан NVL хувиргалт

Тодорхойгүй утгыг бодит утга руу хөрвүүлэхийн тулд NVL функцийг ашиглана уу: NVL ( илэрхийлэл1, илэрхийлэл2), хаана:

илэрхийлэл1-Анхдагч эсвэл тооцоолсон утга нь хоосон байж болно.

илэрхийлэл2- Тэг утгыг орлуулсан утга.

Жич: NVL функцийг ямар ч өгөгдлийн төрлийг хөрвүүлэхэд ашиглаж болох боловч үр дүн нь үргэлж ижил төрлийн байх болно илэрхийлэл1.

NVL хөрвүүлэлт янз бүрийн төрөл:

NUMBER-NVL (тоон багана, 9).

CHAR эсвэл VARCHAR2 - NVL (тэмдэгтүүд|багана,"Боломжгүй").

Лабораторийн ажил. NVL функцийг ашиглаж байна

Oracle SQL дээрх хоосон утгуудтай ажиллах NVL функц.

Дасгал:

hr.employees.хүснэгтээс ажилчдын овог нэр, мөн тухайн ажилтны шимтгэлийн хувь хэмжээг (COMMISSION_PCT багана) харуулсан асуулга бичнэ үү. Энэ тохиолдолд комисс нь тодорхойлогдоогүй ажилчдын хувьд та 0 утгыг харуулах хэрэгтэй. Асуулгын үр дүн Зураг дээр үзүүлсэнтэй ижил байх ёстой. 3.5-1.

Цагаан будаа. 3.5 -1 (51-р мөрөөс эхлэн утгыг харуулсан)

Шийдэл:

Харгалзах хүсэлтийн код дараах байдалтай байж болно.

Эхний_нэрийг "Нэр", овог_нэрийг "Овог нэрээр", NVL (COMMISSION_PCT, 0) hr.employees-аас "Хорооны хувь"-аар СОНГОХ.

NVL функц

NVL функц нь ерөнхийдөө хамгийн түгээмэл хэрэглэгддэг. Энэ функц нь NVL(expr1, expr2) гэсэн хоёр параметрийг хүлээн авдаг. Хэрэв эхний параметр expr1 нь NULL биш бол функц нь өөрийн утгыг буцаана. Хэрэв эхний параметр нь NULL бол функц нь оронд нь хоёрдахь параметрийн утгыг буцаана expr2.

Практик жишээг авч үзье. EMP хүснэгтийн COMM талбар нь NULL утгыг агуулж болно. Асуултыг гүйцэтгэх үед:

EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM-г СОНГОХ

SCOTT.EMP-с

NULL утгыг тэгээр солино. Хэрэв утгыг функц ашиглан үүсгэсэн бол түүнд өөр нэр оноосон гэдгийг анхаарна уу. Асуулгын үр дүн дараах байдлаар харагдах болно.

EMPNO ENAME COMM NVL_COMM
7369 СМИТ 0
7499 АЛЛЕН 300 300
7521 ТОРОГ 500 500
7566 ЖОНС 0
7654 МАРТИН 1400 1400
7698 БЛЕЙК 0
7782 КЛАРК 0
7839 ХААН 0
7844 ТОРЧИГЧ 0 0
7900 Жэймс 0
7902 FORD 0
7934 МИЛЛЕР 0

CEIL(n) функц

CEIL функц нь параметр болгон дамжуулсан n тооноос их буюу тэнцүү хамгийн бага бүхэл тоог буцаана. Жишээлбэл:

CEIL(100) X1, CEIL(-100) X2, CEIL(100.2) X3 , CEIL(-100.2) X4 СОНГОХ

DUAL-аас

TRUNC(n[,м])

TRUNC функц нь аравтын бутархайн m хүртэл таслагдсан n тоог буцаана. m параметрийг орхигдуулж болох бөгөөд энэ тохиолдолд n нь бүхэл тоогоор таслагдана.

SELECT TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRUNC(100.25678, 2) X4

DUAL-аас

SIGN(n) функц

SIGN функц нь тооны тэмдгийг тодорхойлдог. Хэрэв n эерэг бол функц 1-ийг буцаана. Хэрэв сөрөг бол -1-ийг буцаана. Хэрэв тэг бол 0-г буцаана.Жишээ нь:

СОНГОХ ТЭМД(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3

DUAL-аас

Энэ функцийн сонирхолтой онцлог нь m-ийг 0-д хуваах алдаагүйгээр тэгтэй тэнцүүлэх чадвар юм.

POWER(n, m) функц

POWER функц нь n тоог m хүртэл өсгөнө. Зэрэг нь бутархай ба сөрөг байж болох бөгөөд энэ нь энэ функцийн чадварыг ихээхэн өргөжүүлдэг.

POWER(10, 2) X1, POWER(100, 1/2) X2, СОНГОХ,

POWER(1000, 1/3) X3, POWER(1000, -1/3) X4

DUAL-аас

X1 X2 X3 X4
100 10 10 0,1

Зарим тохиолдолд энэ функцийг дуудах үед үл хамаарах зүйл тохиолдож болно. Жишээлбэл:

POWER СОНГОХ(-100, 1/2) X2

DUAL-аас

Энэ тохиолдолд сөрөг тооны квадрат язгуурыг тооцоолох оролдлого хийх бөгөөд энэ нь ORA-01428 "Аргумент мужаас гадуур" гэсэн алдаа гарах болно.

SQRT(n) функц

Энэ функц нь n-ийн квадрат язгуурыг буцаана. Жишээлбэл:

SQRT(100) X-г сонго

DUAL-аас

EXP(n) ба LN(n) функцууд

EXP функц нь e-г n-ийн чадал хүртэл өсгөж, LN функц нь n-ийн натурал логарифмыг тооцоолдог (n нь тэгээс их байх ёстой). Жишээ:

EXP(2) X1, LN(1) X2, LN(EXP(2)) X3 СОНГОХ

Бид үүрлэсэн функцүүдийн талаар бага зэрэг эрт хөндөж байсан, одоо тэдгээрийг арай илүү нарийвчлан авч үзье. Мөн бид NULL утгатай ажиллах функцууд болон асуулгад салаалсан үйлдлийг хэрэгжүүлэхэд туслах функцуудыг авч үзэх болно.

үүрлэсэн функцууд

Оруулсан функцууд нь нэг функцийн буцах утгыг өөр функцийн оролтын параметр болгон ашигладаг. Функцууд үргэлж зөвхөн нэг утгыг буцаана. Тиймээс та функцийн дуудлагын үр дүнг өөр функцийн дуудлагын параметр болгон ашиглахдаа шууд утга гэж үзэж болно. Мөрийн функцуудыг ямар ч түвшинд үүрлэх боломжтой. Нэг функцийн дуудлага иймэрхүү харагдана

Функц1(параметр1, параметр2, …) = үр дүн

Функцийн параметрийг өөр функц руу дуудлагаар солих нь гэх мэт илэрхийлэлд хүргэж болно

F1(парам1.1, F2(парам2.1, параметр2.2, F3(парам3.1)), параметр1.3)

Үр дүнг нь бусад функцэд оролтын утга болгон ашиглахаас өмнө үүрлэсэн функцуудыг эхлээд үнэлдэг. Функцийг үүрлэх хамгийн гүн түвшнээс зүүнээс баруун тийш хамгийн дээд цэг хүртэл үнэлдэг. Өмнөх илэрхийллийг дараах байдлаар гүйцэтгэнэ

  1. F3(param1) функцийг үнэлж буцах утгыг 2-р функцийн гуравдахь параметр болгон ашиглаж байгаа бөгөөд үүнийг param2 гэж нэрлэе.3
  2. Дараа нь F2(param1, param2.2, param2.3) функцийг үнэлж, буцаасан утгыг F1 - param1.2 функцын хоёр дахь параметр болгон ашиглана.
  3. Эцэст нь F1(param1, param2, param1.3) функцийг үнэлж, үр дүнг дуудаж буй програм руу буцаана.

Тиймээс F3 функц нь гурав дахь үүрлэх түвшинд байна.

Асуулга авч үзье

dual-аас next_day( last_day(sysdate)-7, 'tue')-ийг сонгох;

  1. Энэ асуулгад доороос дээш гурван функц байна - SYSDATE, LAST_DAY, NEXT_DAY. Ийм маягаар хүсэлт гаргаж байна
  2. Оруулсан SYSDATE функцийг гүйцэтгэв. Энэ нь одоогийн системийн цагийг буцаана. Одоогийн огноог 2009 оны 10-р сарын 28 гэж бодъё
  3. Дараа нь LAST_DAY хоёр дахь түвшний функцийн үр дүнг тооцно. LAST_DATE('2009 оны 10-р сарын 28') нь 2009 оны 10-р сарын сүүлийн өдөр буюу 2009 оны 10-р сарын 31-ийг буцаана.
  4. Дараа нь энэ өдрөөс долоон хоног хасагдана - 10-р сарын 24-ний өдрийг авна.
  5. Эцэст нь, NEXT_DAY('2009 оны 10-р сарын 24', 'tue') функцийг үнэлж, асуулга нь 10-р сарын сүүлчийн Мягмар гарагийг буцаадаг - энэ нь бидний жишээнд 2009 оны 10-р сарын 27-ны өдөр юм.

Олон тооны үүрлэсэн функцын дуудлагуудыг ашиглан нарийн төвөгтэй илэрхийллийг ойлгох, бүтээх нь нэлээд хэцүү боловч энэ нь цаг хугацаа, дадлага хийх замаар ирдэг. Та ийм хэллэгийг хэсэг болгон хувааж, тусад нь шалгаж болно. DUAL хүснэгт нь асуулга болон функцийн дуудлагын үр дүнг шалгахад маш хэрэгтэй. Та жижиг бүрэлдэхүүн хэсгүүдийг туршиж, дибаг хийж, дараа нь нэг том хүссэн илэрхийлэл болгон нэгтгэж болно.

Салбарын чиг үүрэг

IF-THEN-ALSE гэж нэрлэгддэг салбарлах функцууд нь зарим нөхцөл байдлаас шалтгаалан гүйцэтгэлийн замыг тодорхойлоход ашиглагддаг. Салбарын функцууд нь нөхцөл байдлын үнэлгээний үр дүнд үндэслэн өөр өөр үр дүнг өгдөг. Ийм функцүүдийн бүлэгт NULL утгатай ажиллах функцүүд байдаг: NVL, NVL2, NULLIF болон COALESCE. Мөн DECODE функц болон CASE илэрхийллээр илэрхийлэгдэх ерөнхий функцууд. DECODE функц нь Oracle функц бөгөөд CASE илэрхийлэл нь ANSI SQL стандартад байдаг.

NVL функц

NVL функц нь ямар ч өгөгдлийн төрлийн багана эсвэл илэрхийллийн утгыг тэг утгыг шалгадаг. Хэрэв утга нь NULL бол NULL бус өөр өгөгдмөл утгыг буцаана, эс бөгөөс анхны утгыг буцаана.

NVL функц нь шаардлагатай хоёр параметртэй ба синтакс нь NVL(оригинал, ifnull) бөгөөд эх нь шалгах анхны утга бөгөөд хэрэв эх нь NULL байвал функцээс буцаадаг үр дүн ifnull юм. ifnull болон анхны параметрүүдийн өгөгдлийн төрөл нийцтэй байх ёстой. Өөрөөр хэлбэл, өгөгдлийн төрөл нь ижил байх ёстой эсвэл утгыг нэг төрлөөс нөгөөд хувиргах боломжтой байх ёстой. NVL функц нь анхны параметрийн өгөгдлийн төрөлтэй ижил төрлийн өгөгдлийн утгыг буцаана. Гурван асуултыг авч үзье

Асуулга 1: dual-аас nvl(1234)-г сонгоно уу;

Асуулга 2: dual-аас nvl(null, 1234)-г сонгоно уу;

Асуулга 3: dual-аас nvl(substr('abc', 4), 'Дэд мөр байхгүй')-г сонгоно уу;

NVL функц нь хоёр параметр шаарддаг тул 1-р асуулга нь ORA-00909: хүчингүй аргументуудын алдааг буцаана. NULL-г шалгаж байгаа бөгөөд энэ нь NULL тул 2-р асуулга 1234-ийг буцаана. Гурав дахь асуулга нь гурван тэмдэгтийн тэмдэгтээс дөрөв дэх тэмдэгтийг задлахыг оролддог SUBSTR функцийг ашигладаг бөгөөд NULL, NVL функц нь "No sbustring exists" мөрийг буцаана.

NVL функц нь тоонуудтай ажиллахад маш их хэрэгтэй байдаг. Энэ нь NULL утгыг 0 болгон хөрвүүлэхэд хэрэглэгддэг бөгөөд ингэснээр тоон дээрх арифметик үйлдлүүд NULL-ийг буцаадаггүй.

NVL функц2

NVL2 функц нь NVL-ээс илүү функцээр хангадаг боловч NULL функцийг бас зохицуулдаг. Энэ нь ямар ч төрлийн багана эсвэл илэрхийллийн утгыг тэг утгыг шалгадаг. Хэрэв утга нь NULL биш бол хоёр дахь параметрийг буцаана, эс тэгвээс NVL функцээс ялгаатай нь гурав дахь параметрийг буцаана, энэ тохиолдолд анхны утгыг буцаана.

NVL2 функц нь шаардлагатай гурван параметртэй бөгөөд синтакс нь NVL2(эх, ifnotnull, ifnull) бөгөөд эх нь шалгах утга, ifnotnull нь эх нь NULL биш бол буцаах утга, хэрэв эх нь NULL бол буцаах утга юм. NULL. ifnotnull болон ifnull параметрүүдийн өгөгдлийн төрлүүд нь нийцтэй байх ёстой бөгөөд тэдгээр нь LONG төрлийн байж болохгүй. NVL2 функцээр буцаасан өгөгдлийн төрөл нь ifnotnull параметрийн өгөгдлийн төрөлтэй тэнцүү байна. Хэд хэдэн жишээг харцгаая

1-р асуулга: dual-аас nvl2(1234, 1, 'a string')-г сонгоно уу;

Асуулга 2: dual-аас nvl2(null, 1234, 5678)-г сонгоно уу;

Асуулга 3: dual-аас nvl2(substr('abc', 2), 'Bc биш', 'Дэд мөр байхгүй')-г сонгоно уу;

1-р асуулгын ifnotnull параметр нь тоо, ifnull параметр нь мөр юм. Өгөгдлийн төрлүүд таарахгүй байгаа тул "ORA-01722: хүчингүй дугаар" гэсэн алдаа гарч ирнэ. Хоёр дахь асуулга нь ifnull параметрийг буцаана, учир нь эх нь NULL, үр дүн нь 5678. Гурав дахь асуулга нь SUBSTR функцийг ашигладаг бөгөөд энэ нь 'bc'-г буцааж, NVL2('bc','bc биш','Дэд мөр байхгүй')-г дууддаг - ifnotnull-ийг буцаана. параметр - "МЭӨ биш".

NULLIF функц

NULLIF функц нь ижил хоёр утгыг шалгадаг. Хэрэв тэдгээр нь ижил байвал NULL буцаана, үгүй ​​бол эхний параметрийг буцаана. NULLIF функц нь шаардлагатай хоёр параметртэй ба синтакс нь NULLIF(хэрэв тэнцүү, харьцуулах_зүйл). Функц нь хоёр параметрийг харьцуулах бөгөөд хэрэв тэдгээр нь ижил байвал NULL, эс бөгөөс ifunequal параметрийг буцаана. Хүсэлтүүдийг анхаарч үзээрэй

1-р асуулга: dual-аас nullif(1234, 1234)-г сонгоно уу;

Параметрүүд нь ижил тул нэг асуулга NULL утгыг буцаана. 2-р асуулга дахь мөрүүдийг огноо руу хөрвүүлдэггүй, харин мөр болгон харьцуулдаг. Мөрүүд өөр өөр урттай тул тэгш бус 24-JUL-2009 параметрийг буцаана.

Зураг 10-4-т NULLIF функцийг NVL2 функц дотор байрлуулсан байна. NULLIF функц нь эргээд SUBSTR болон UPPER функцуудыг ifunequal параметрийн илэрхийллийн хэсэг болгон ашигладаг. EMAIL баганыг энэ илэрхийлэлтэй харьцуулсан бөгөөд овог нэр нь 4 тэмдэгтийн урттай ажилчдын нэрийн эхний үсгийг овог нэртэй холбосон байна. Эдгээр утга тэнцүү байвал NULLIF нь NULL утгыг буцаана, эс тэгвээс тэгш бус параметрийн утгыг буцаана. Эдгээр утгыг NVL2 функцийн параметр болгон ашигладаг. NVL2 нь эргээд харьцуулсан элементүүд таарч байгаа эсэх талаар тайлбарыг буцаана.

Зураг 10-4 - NULLIF функцийг ашиглах

COALESCE функц

COALESCE функц нь параметрийн жагсаалтаас эхний NULL бус утгыг буцаана. Хэрэв бүх параметрүүд NULL байвал NULL буцаана. COALESCE функц нь шаардлагатай хоёр параметр ба дурын тооны нэмэлт параметртэй бөгөөд синтакс нь COALESCE(илэрхийлэл1, илэрхийлэл2, ..., илэрхийлэл) бөгөөд хэрэв илэрхийлэл 1-ийн утга NULL биш бол үр дүн нь илэрхийлэл1, эс бөгөөс үр дүн нь илэрхийлэл2 байна. хэрэв NULL биш бол гэх мэт. COALESCE нь үүрлэсэн NVL функцтэй утгаараа тэнцүү байна

COALESCE(илэрхийлэл1, илэрхийлэл2) = NVL(илэрхийлэл1, илэрхийлэл2)

COALESCE(илэрхийлэл1, илэрхийлэл2, илэрхийлэл3) = NVL(илэрхийлэл1, NVL(илэрхийлэл2, илэрхийлэл3))

NULL бус утга олдвол буцаасан утгын өгөгдлийн төрөл нь эхний NULL бус утгын өгөгдлийн төрөлтэй тэнцүү байна. "ORA-00932: үл нийцэх өгөгдлийн төрлүүд" алдаанаас зайлсхийхийн тулд NULL бус бүх параметрүүд нь эхний NULL бус параметртэй нийцтэй байх ёстой. Гурван жишээг авч үзье

1-р асуулга: хосоос coalesce(null, null, null, 'a string') сонгоно;

Асуулга 2: хосоос coalesce(null, null, null)-ыг сонгоно уу;

Асуулга 3: dual-аас coalesce(substr('abc', 4), 'Bc биш', 'Дэд мөр байхгүй')-г сонгоно;

1-р асуулга нь эхний NULL биш параметр тул дөрөв дэх параметрийг буцаана: мөр. Хоёр дахь асуулга нь бүх параметрүүд нь NULL учраас NULL-г буцаана. Асуулга 3 нь эхний параметрийг үнэлж, NULL авч, эхний NULL бус параметр учраас хоёр дахь параметрийг буцаана.

Хэрэв та NVL функцийг аль хэдийн мэддэг бол NVL2 функцын параметрүүд нь төөрөгдөлд орж болзошгүй. NVL(эх, ifnull) утга нь NULL биш бол эх утгыг буцаана, үгүй ​​бол ifnull. NVL2(эх, ifnotnull, ifnull) хэрэв эх нь null биш бол ifnotnull-ийг буцаана. NVL функцийн хоёр дахь параметр нь ifnull, харин NVL2 нь ifnotnull байдгаас төөрөгдөл үүсдэг. Тиймээс функц дэх параметрийн байрлалд найдах хэрэггүй.

DECO функц

DECODE функц нь if-then-else логикийг хэрэгжүүлдэг бөгөөд эхний хоёр параметрийн тэгш байдлыг шалгаж, тэнцүү бол гурав дахь утгыг, үгүй ​​бол өөр утгыг буцаана. DECODE функц нь шаардлагатай гурван параметртэй бөгөөд синтакс нь DECODE(expr1, comp1, iftrue1, , ) юм. Эдгээр параметрүүдийг дараах псевдокодын жишээнд үзүүлсний дагуу ашигладаг.

IF expr1=comp1 бол iftrue1-ийг буцаана

Хэрэв expr1=comp2 байвал iftrue2-г буцаана

Хэрэв exprN=compN бол iftrueN-г буцаана

Үгүй бол NULL|iffalse буцаана;

Нэгдүгээрт, expr1-ийг comp1-тэй харьцуулна. Хэрэв тэдгээр нь тэнцүү бол iftrue1 буцаана. Хэрэв expr1 нь comp1-тэй тэнцүү биш бол дараа нь юу болох нь comp2 болон iftrue2 параметрүүдийг зааж өгсөн эсэхээс хамаарна. Хэрэв өгөгдсөн бол expr1-ийн утгыг comp2-тэй харьцуулна. Хэрэв утгууд нь тэнцүү бол iftrue2-г буцаана. Хэрэв үгүй ​​бол хэрэв compN байвал iftrueN параметрийн хос, expr1 болон compN-ийг харьцуулж, хэрэв үнэн бол тэнцүү бол iftrueN-ийг буцаана. Хэрэв параметрийн багцад тохирох зүйл олдоогүй бол энэ параметрийг зааж өгсөн бол iffalse эсвэл NULL гэсэн утгыг буцаана.

DECODE функцийн бүх параметрүүд нь илэрхийлэл байж болно. Буцаах утгын төрөл нь эхний баталгаажуулагчийн төрөл - параметртэй тэнцүү байна comp 1. Илэрхийлэл expr 1 нь комп параметрийн өгөгдлийн төрөл рүү далд хэлбэрээр хувиргадаг1. Бусад бүх хүмүүс боломжтой сонголтууд comp 1 … compN мөн далд хэлбэрээр comp төрөлд хөрвүүлэгддэг 1. DECODE нь NULL утгыг өөр NULL утгатай тэнцүү гэж үздэг, өөрөөр хэлбэл. хэрэв expr1 нь NULL, comp3 нь NULL, comp2 нь NULL биш бол iftrue3 нь буцна. Хэд хэдэн жишээг харцгаая

1-р асуулга: хосоос код тайлах(1234, 123, '123 нь таарч байна') сонгоно уу;

2-р асуулга: хосоос код тайлах(1234, 123, '123 нь таарч байна', 'Тохирохгүй') сонгоно уу;

Асуулга 3: декодчилохыг сонгоно уу('хайлт', 'comp1', 'true1', 'comp2', 'true2', 'хайлт', 'true3', substr('2search', 2, 6), 'true4', ' худал') хосоос;

Нэгдүгээр асуулга нь 1234 ба 123 утгыг харьцуулна. Тэд тэнцүү биш тул iftrue1-ийг үл тоомсорлож, iffalse тодорхойлогдоогүй тул NULL-г буцаана. iffalse утга тодорхойлогдсоноос бусад тохиолдолд хоёр дахь асуулга нь 1-р асуулгатай ижил байна. 1234 нь 123-тай тэнцүү биш тул iffalse - 'Тоглолт байхгүй' гэж буцаана. Гурав дахь асуулга нь параметрийн утгыг хайлтын утгатай харьцуулна. Comp1 болон comp2 параметрүүд нь 'хайх'-тай тэнцүү биш тул iftrue1 болон iftrue2-ын үр дүнг алгасах болно. Гурав дахь comp3 элементийн харьцуулах үйлдлээр (параметрийн байрлал 6) таарч байгаа бөгөөд iftrue3 (параметр 7) буцах утга нь "true3" байна. Тохирох зүйл олдсон тул дахин тооцоо хийхгүй. Өөрөөр хэлбэл, comp4-ийн утга (параметр 8) мөн expr1-тэй таарч байгаа хэдий ч өмнөх харьцуулалтаас таарч олдсон тул энэ илэрхийллийг хэзээ ч үнэлдэггүй.

CASE илэрхийлэл

Гурав, дөрөв дэх үеийн бүх програмчлалын хэлүүд кейсийн бүтцийг хэрэгжүүлдэг. DECODE функцийн нэгэн адил CASE илэрхийлэл нь if-then-else логикийг хэрэгжүүлэх боломжийг олгодог. CASE илэрхийллийг ашиглах хоёр сонголт байдаг. Энгийн CASE мэдэгдэл нь нэг удаа харьцуулах эх элементийг тохируулж, дараа нь шаардлагатай бүх шалгалтын нөхцлийг жагсаав. Цогцолбор (хайсан) CASE нь нөхцөл бүрийн хувьд хоёр мэдэгдлийг үнэлдэг.

CASE илэрхийлэл нь шаардлагатай гурван параметртэй. Илэрхийллийн синтакс нь төрлөөс хамаарна. Энгийн CASE илэрхийллийн хувьд иймэрхүү харагдана

CASE хайлт_илэрхийлэл

Харьцуулах_илэрхийлэл1 ХЭЗЭЭ ТЭГВЭЛ iftrue1

}