NVL კონვერტაციები მონაცემთა სხვადასხვა ტიპებისთვის. NVL კონვერტაციები მონაცემთა სხვადასხვა ტიპებისთვის Nvl sql აღწერილობა

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 WARD 500 500
7566 ჯონსი 0
7654 მარტინი 1400 1400
7698 ბლეიკი 0
7782 კლარკი 0
7839 მეფე 0
7844 TURNER 0 0
7900 ჯეიმსი 0
7902 FORD 0
7934 მილერი 0

ფუნქცია CEIL(n)

CEIL ფუნქცია აბრუნებს პარამეტრად გადაცემულ n რიცხვზე დიდ ან ტოლს უმცირეს მთელ რიცხვს. Მაგალითად:

SELECT CEIL(100) X1, CEIL(-100) X2, CEIL(100.2) X3 , CEIL(-100.2) X4

DUAL-დან

ფუნქცია TRUNC(n [,m])

TRUNC ფუნქცია აბრუნებს რიცხვს n-ს, შეკვეცილს m ათობითი ადგილებში. 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-ს. თუ n უარყოფითია, ის უბრუნებს -1-ს. თუ ნულის ტოლია, მაშინ ბრუნდება 0, მაგალითად:

SELECT SIGN(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3

DUAL-დან

ამ ფუნქციის საინტერესო თვისებაა m ნულის ტოლი გადაცემის უნარი 0-ზე გაყოფის გამოწვევის გარეშე.

ფუნქცია POWER(n, m)

POWER ფუნქცია ზრდის n რიცხვს m ხარისხამდე. ხარისხი შეიძლება იყოს წილადი და უარყოფითი, რაც მნიშვნელოვნად აფართოებს ამ ფუნქციის შესაძლებლობებს.

SELECT 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

ზოგიერთ შემთხვევაში, გამონაკლისი შეიძლება მოხდეს ამ ფუნქციის გამოძახებისას. Მაგალითად:

SELECT 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 ცხრილიდან ნახ. 3.4-1:

ბრინჯი. 3.4 -1

ამ შემთხვევაში მონაცემები ისე უნდა იყოს დალაგებული, რომ პირველ რიგში გამოჩნდეს ყველაზე მაღალი ხელფასის მქონე თანამშრომლების რიგები.

Შენიშვნა:

ზოგიერთი ხელფასის ღირებულება ნახ. 3.4-1 შეიცვალა, ამიტომ ისინი შეიძლება არ იყოს იგივე, რაც თქვენი მნიშვნელობები.

გამოსავალი:

აირჩიეთ სახელი, როგორც "სახელი", გვარი, როგორც "გვარი", TO_CHAR (ხელფასი, "L999999999.99") როგორც "ხელფასი" FROM hr.employees შეკვეთა ხელფასის მიხედვით DESC.

ფუნქციები TO_NUMBER და TO_DATE

სტრიქონის გადაქცევის ფუნქცია თარიღად TO_DATE (სტრიქონი, ფორმატი). ფორმატის შესაძლო მნიშვნელობები უკვე განვიხილეთ ზემოთ, ამიტომ მე მივცემ ამ ფუნქციის გამოყენების რამდენიმე მაგალითს. მაგალითები:

აირჩიეთ TO_DATE ("01/01/2010", `DD.MM.YYYY") FROM DUAL დააბრუნებს თარიღს `01/01/2010“;

აირჩიეთ TO_DATE ("01.იან.2010", `DD.MON.YYYY") FROM DUAL დააბრუნებს თარიღს `01/01/2009“;

აირჩიეთ 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("500000", "999G999") FROM DUAL დააბრუნებს ნომერს 500000.

RR ელემენტი თარიღის ფორმატში

RR datetime ფორმატის ელემენტი მსგავსია YY datetime ფორმატის ელემენტისა, მაგრამ ის უზრუნველყოფს დამატებით მოქნილობას სხვა საუკუნეებში თარიღის მნიშვნელობების შესანახად. RR datetime ფორმატის ელემენტი საშუალებას გაძლევთ შეინახოთ მე-20 საუკუნის თარიღები 21-ე საუკუნეში მხოლოდ ორის მითითებით. ბოლო ციფრებიწლის.

თუ მიმდინარე წლის ბოლო ორი ციფრი არის 00-დან 49-მდე, მაშინ დაბრუნებულ წელს აქვს იგივე პირველი ორი ციფრი, რაც მიმდინარე წელს.

თუ მიმდინარე წლის ბოლო ორი ციფრი არის 50-დან 99-მდე, მაშინ დაბრუნებული წლის პირველი 2 ციფრი 1-ით მეტია მიმდინარე წლის პირველ 2 ციფრზე.

თუ მიმდინარე წლის ბოლო ორი ციფრი არის 00-დან 49-მდე, მაშინ დაბრუნებული წლის პირველი 2 ციფრი 1-ით ნაკლებია მიმდინარე წლის პირველ 2 ციფრზე.

თუ მიმდინარე წლის ბოლო ორი ციფრი არის 50-დან 99-მდე, მაშინ დაბრუნებულ წელს აქვს იგივე პირველი ორი ციფრი, რაც მიმდინარე წელს.

NVL ფუნქცია

NVL ფუნქცია ძირითადად გამოიყენება ყველაზე ხშირად. ფუნქცია იღებს ორ პარამეტრს: NVL (expr1, expr2). თუ პირველი პარამეტრი expr1 არ არის NULL, მაშინ ფუნქცია აბრუნებს მის მნიშვნელობას. თუ პირველი პარამეტრი არის NULL, მაშინ ფუნქცია აბრუნებს მეორე პარამეტრის მნიშვნელობას expr2.

მაგალითი: აირჩიეთ NVL (მიმწოდებლის_ქალაქი, n/a") მომწოდებლებიდან:

ზემოთ მოყვანილი SQL განცხადება დააბრუნებს n/"-ს, თუ მიმწოდებლის_ქალაქის ველი შეიცავს null მნიშვნელობას. წინააღმდეგ შემთხვევაში, ის დააბრუნებს მიმწოდებლის_ქალაქის მნიშვნელობას.

Oracle/PLSQL-ში NVL ფუნქციის გამოყენების კიდევ ერთი მაგალითია:

აირჩიეთ მომწოდებლების_ID, NVL(supplier_desc, მომწოდებლის_სახელი) მომწოდებლებიდან.

ეს SQL განცხადება დაბრუნდება მომწოდებლის_სახელიველი თუ მომწოდებელი_აღმომშეიცავს null მნიშვნელობას. წინააღმდეგ შემთხვევაში ის დაბრუნდება მომწოდებელი_აღმომ.

ბოლო მაგალითი: Oracle/PLSQL-ში NVL ფუნქციის გამოყენება არის: გაყიდვებიდან აირჩიეთ NVL(კომისია, 0);

ამ SQL განცხადებამ დააბრუნა მნიშვნელობა 0 if კომისიაველი შეიცავს null მნიშვნელობას. წინააღმდეგ შემთხვევაში დაბრუნდებოდა კომისიებიველი.

NVL კონვერტაციები მონაცემთა სხვადასხვა ტიპებისთვის

ნულოვანი მნიშვნელობის რეალურ მნიშვნელობად გადასაყვანად გამოიყენეთ NVL ფუნქცია: NVL ( გამოხატულება1, გამოხატულება2), სად:

გამოხატულება 1 -ორიგინალური ან გამოთვლილი მნიშვნელობა, რომელიც შეიძლება განუსაზღვრელი იყოს.

გამოხატულება2- მნიშვნელობა, რომელიც ჩანაცვლებულია განუსაზღვრელი მნიშვნელობით.

Შენიშვნა: NVL ფუნქცია შეიძლება გამოყენებულ იქნას ნებისმიერი ტიპის მონაცემთა კონვერტაციისთვის, მაგრამ შედეგი ყოველთვის იქნება იგივე ტიპი გამოხატულება 1.

NVL კონვერტაცია ამისთვის სხვადასხვა სახის:

NUMBER - NVL (რიცხვითი სვეტი, 9).

CHAR ან VARCHAR2 - NVL (სიმბოლოები|სვეტი,"Მიუწვდომელია").

ლაბორატორიული სამუშაო. NVL ფუნქციის გამოყენებით

NVL ფუნქცია Oracle SQL-ში ნულოვანი მნიშვნელობებით მუშაობისთვის.

ვარჯიში:

დაწერეთ მოთხოვნა, რომელიც აჩვენებს თანამშრომლის სახელსა და გვარს ინფორმაციას hr.employees ცხრილიდან, ასევე საკომისიოს განაკვეთს (COMMISSION_PCT სვეტი) თანამშრომლისთვის. ამ შემთხვევაში, იმ თანამშრომლებისთვის, ვისთვისაც საკომისიო არ არის განსაზღვრული, უნდა იყოს ნაჩვენები 0-ის მნიშვნელობა, როგორც ნაჩვენებია ნახ. 3.5-1.

ბრინჯი. 3.5 -1 (მნიშვნელობები ნაჩვენებია 51-ე სტრიქონიდან დაწყებული)

გამოსავალი:

შესაბამისი მოთხოვნის კოდი შეიძლება იყოს ასეთი:

აირჩიეთ სახელი, როგორც "სახელი", გვარი, როგორც "გვარი", NVL (COMMISSION_PCT, 0) როგორც "კომისიის განაკვეთი" FROM hr.employees.

ჩვენ ცოტა ადრე შევეხეთ წყობილ ფუნქციებს, ახლა კი მათ ცოტა უფრო დეტალურად განვიხილავთ. ჩვენ ასევე განვიხილავთ NULL მნიშვნელობასთან მუშაობის ფუნქციებს და ფუნქციებს, რომლებიც ხელს უწყობენ განშტოების ოპერაციის განხორციელებას მოთხოვნაში.

ჩადგმული ფუნქციები

ჩადგმული ფუნქციები იყენებენ ერთი ფუნქციის დაბრუნების მნიშვნელობას, როგორც სხვა ფუნქციის შეყვანის პარამეტრს. ფუნქციები ყოველთვის აბრუნებენ მხოლოდ ერთ მნიშვნელობას. მაშასადამე, თქვენ შეგიძლიათ ფუნქციის გამოძახების შედეგი განიხილოთ, როგორც მნიშვნელობა სიტყვასიტყვით, როდესაც იყენებთ მას პარამეტრად სხვა ფუნქციის გამოძახებისთვის. სიმებიანი ფუნქციები შეიძლება ჩადებული იყოს ნებისმიერ დონეზე. ერთი ფუნქციის გამოძახება ასე გამოიყურება

ფუნქცია1(პარამეტრი1, პარამეტრი2,…) = შედეგი

ფუნქციის პარამეტრის სხვა ფუნქციის გამოძახებით ჩანაცვლებამ შეიძლება გამოიწვიოს ისეთი გამონათქვამები, როგორიცაა

F1(param1.1, F2(param2.1, param2.2, F3(param3.1)), param1.3)

ჩადგმული ფუნქციები პირველად ფასდება, სანამ მათი შედეგები გამოიყენებოდა როგორც შეყვანის მნიშვნელობებისხვა ფუნქციებისთვის. ფუნქციები ფასდება ბუდის ღრმა დონიდან ყველაზე მაღლა მარცხნიდან მარჯვნივ. წინა გამოთქმა შესრულებულია შემდეგნაირად

  1. ფუნქცია F3(param1) ფასდება და დაბრუნებული მნიშვნელობა გამოიყენება მესამე პარამეტრად ფუნქციისთვის 2, მოდით ვუწოდოთ მას param2.3.
  2. შემდეგ ფასდება ფუნქცია F2(param1, param2.2, param2.3) და დაბრუნებული მნიშვნელობა გამოიყენება F1 ფუნქციის მეორე პარამეტრად - param1.2.
  3. ბოლოს ფასდება ფუნქცია F1(param1, param2, param1.3) და შედეგი უბრუნდება გამოძახების პროგრამას.

ამრიგად, F3 ფუნქცია მესამე ბუდე დონეზეა.

განვიხილოთ მოთხოვნა

აირჩიეთ next_day(last_day(sysdate)-7, ‘tue’) ორმაგიდან;

  1. ამ მოთხოვნაში სამი ფუნქციაა, ქვედა დონიდან ზედა დონეზე - SYSDATE, LAST_DAY, NEXT_DAY. მოთხოვნა შესრულებულია შემდეგნაირად
  2. ჩადგმული SYSDATE ფუნქცია შესრულებულია. ის აბრუნებს სისტემის მიმდინარე დროს. ვთქვათ, ამჟამინდელი თარიღია 2009 წლის 28 ოქტომბერი
  3. შემდეგ გამოითვლება მეორე დონის ფუნქციის შედეგი LAST_DAY. LAST_DATE('28-ოქტ-2009') აბრუნებს 2009 წლის ოქტომბრის ბოლო დღეს, რომელიც არის 2009 წლის 31 ოქტომბერი.
  4. შემდეგ ამ თარიღს აკლდება შვიდი დღე - გამოდის 24 ოქტომბერი.
  5. საბოლოოდ, ფუნქცია NEXT_DAY('24-ოქტ-2009', 'სამშაბათი') ფასდება და მოთხოვნა აბრუნებს ოქტომბრის ბოლო სამშაბათს - რაც ჩვენს მაგალითში არის 27-ოქტ-2009.

საკმაოდ რთული გასაგები და აშენება რთული გამონათქვამებიბევრი ჩადგმული ფუნქციის ზარის გამოყენება, მაგრამ ამას დრო და პრაქტიკა მოჰყვება. თქვენ შეგიძლიათ დაშალოთ ასეთი გამონათქვამები ნაწილებად და ცალ-ცალკე გამოსცადოთ. DUAL ცხრილი ძალიან სასარგებლოა მოთხოვნების შესამოწმებლად და ფუნქციის გამოძახების შედეგებისთვის. თქვენ შეგიძლიათ შეამოწმოთ და გამართოთ მცირე კომპონენტები, რომლებიც შემდეგ გაერთიანებულია ერთ დიდ სასურველ გამონათქვამში.

განშტოების ფუნქციები

ფილიალის ფუნქციები, ასევე ცნობილი როგორც IF-THEN-ELSE, გამოიყენება შესრულების გზის დასადგენად, გარკვეული გარემოებების მიხედვით. განშტოების ფუნქციები აბრუნებს განსხვავებულ შედეგებს მდგომარეობის შეფასების შედეგის საფუძველზე. ასეთი ფუნქციების ჯგუფში შედის NULL მნიშვნელობით მუშაობის ფუნქციები: NVL, NVL2, NULLIF და COALESCE. ასევე საერთო ფუნქციები, რომლებიც წარმოდგენილია DECODE ფუნქციით და CASE გამოხატვით. DECODE ფუნქცია არის Oracle ფუნქცია, ხოლო CASE გამოხატულება წარმოდგენილია ANSI SQL სტანდარტში.

NVL ფუნქცია

NVL ფუნქცია ამოწმებს სვეტის ან ნებისმიერი ტიპის მონაცემთა გამოხატვის მნიშვნელობას NULL-თან მიმართებაში. თუ მნიშვნელობა არის NULL, ის აბრუნებს ალტერნატიულ არა-NULL ნაგულისხმევ მნიშვნელობას, წინააღმდეგ შემთხვევაში აბრუნებს თავდაპირველ მნიშვნელობას.

NVL ფუნქციას აქვს ორი საჭირო პარამეტრი და სინტაქსი არის NVL (ორიგინალი, ifnull), სადაც ორიგინალი არის ორიგინალური მნიშვნელობა შესამოწმებლად და ifnull არის ფუნქციის მიერ დაბრუნებული შედეგი, თუ ორიგინალური მნიშვნელობა არის NULL. ifnull და ორიგინალური პარამეტრების მონაცემთა ტიპი უნდა იყოს თავსებადი. ანუ, ან მონაცემთა ტიპი უნდა იყოს იგივე, ან უნდა იყოს შესაძლებელი მნიშვნელობების უტყუარი გადაქცევა ერთი ტიპიდან მეორეზე. NVL ფუნქცია აბრუნებს იგივე მონაცემთა ტიპის მნიშვნელობას, როგორც ორიგინალური პარამეტრის მონაცემთა ტიპი. განვიხილოთ სამი შეკითხვა

შეკითხვა 1: აირჩიეთ nvl(1234) ორმაგიდან;

შეკითხვა 2: აირჩიეთ nvl(null, 1234) dual-დან;

შეკითხვა 3: აირჩიეთ nvl(substr('abc', 4), 'ქვესტრიქონი არ არსებობს') dual-დან;

ვინაიდან NVL ფუნქცია მოითხოვს ორ პარამეტრს, მოთხოვნა 1 დააბრუნებს შეცდომას ORA-00909: არგუმენტების არასწორი რაოდენობა. შეკითხვა 2 დააბრუნებს 1234-ს, რადგან NULL მნიშვნელობა შემოწმებულია და ის არის NULL. შეკითხვა მესამე იყენებს ჩადგმულ SUBSTR ფუნქციას, რომელიც ცდილობს მეოთხე სიმბოლოს ამოღებას სამი სიმბოლოს სიგრძის სტრიქონიდან, დააბრუნებს NULL-ს და NVL ფუნქციას, რომელიც აბრუნებს სტრიქონს „არ არსებობს sbusstring“.

NVL ფუნქცია ძალიან სასარგებლოა ციფრებთან მუშაობისას. იგი გამოიყენება NULL მნიშვნელობების 0-ზე გადასაყვანად, რათა არითმეტიკული ოპერაციები არ დააბრუნოს NULL

NVL ფუნქცია2

NVL2 ფუნქცია უზრუნველყოფს უფრო მეტ ფუნქციონირებას, ვიდრე NVL, მაგრამ ასევე ემსახურება NULL მნიშვნელობების დამუშავებას. ის ამოწმებს ნებისმიერი ტიპის სვეტის ან გამოხატვის მნიშვნელობას NULL-თან მიმართებაში. თუ მნიშვნელობა არ არის NULL, მაშინ ბრუნდება მეორე პარამეტრი, წინააღმდეგ შემთხვევაში ბრუნდება მესამე პარამეტრი, განსხვავებით NVL ფუნქციისგან, რომელიც ამ შემთხვევაში აბრუნებს თავდაპირველ მნიშვნელობას.

NVL2 ფუნქციას აქვს სამი საჭირო პარამეტრი და სინტაქსია NVL2 (ორიგინალი, ifnotnull, ifnull), სადაც ორიგინალი არის შემოწმებული მნიშვნელობა, ifnotnull არის დაბრუნებული მნიშვნელობა, თუ ორიგინალი არ არის NULL, და ifnull არის დაბრუნებული მნიშვნელობა, თუ ორიგინალი არის NULL. ifnotnull და ifnull პარამეტრების მონაცემთა ტიპები უნდა იყოს თავსებადი და ისინი არ შეიძლება იყოს LONG ტიპის. NVL2 ფუნქციით დაბრუნებული მონაცემთა ტიპი უდრის ifnotnull პარამეტრის მონაცემთა ტიპს. მოდით შევხედოთ რამდენიმე მაგალითს

შეკითხვა 1: აირჩიეთ nvl2(1234, 1, „სტრიქონი“) ორმაგიდან;

შეკითხვა 2: აირჩიეთ nvl2(null, 1234, 5678) ორმაგიდან;

შეკითხვა 3: აირჩიეთ nvl2(substr('abc', 2), 'Not bc', 'No substring') dual-დან;

ifnotnull პარამეტრი მოთხოვნის 1-ში არის რიცხვი, ხოლო ifnull პარამეტრი არის სტრიქონი. იმის გამო, რომ მონაცემთა ტიპები შეუთავსებელია, დაბრუნდა შეცდომა „ORA-01722: არასწორი ნომერი“. შეკითხვა მეორე აბრუნებს ifnull პარამეტრს, რადგან ორიგინალი არის NULL და შედეგი იქნება 5678. შეკითხვა მესამე იყენებს SUBSTR ფუნქციას, რომელიც აბრუნებს 'bc' და იძახებს NVL2 ('bc', 'Not bc', 'No substring') - რომელიც აბრუნებს ifnotnull პარამეტრი – „არა bc“.

NULLIF ფუნქცია

NULLIF ფუნქცია ამოწმებს იდენტურია თუ არა ორი მნიშვნელობა. თუ ისინი იგივეა, NULL ბრუნდება, წინააღმდეგ შემთხვევაში, პირველი პარამეტრი დაბრუნდება. NULLIF ფუნქციას აქვს ორი საჭირო პარამეტრი და სინტაქსი არის NULLIF(ifunequal, krahasim_item). ფუნქცია ადარებს ორ პარამეტრს და თუ ისინი იდენტურია, უბრუნდება NULL, წინააღმდეგ შემთხვევაში პარამეტრი არის თუ არათანაბარი. მოდით განვიხილოთ მოთხოვნები

შეკითხვა 1: აირჩიეთ nullif(1234, 1234) dual-დან;

პირველი შეკითხვა აბრუნებს NULL-ს, რადგან პარამეტრები იდენტურია. Query 2-ის სტრიქონები არ გარდაიქმნება თარიღად, მაგრამ ადარებენ სტრიქონებს. ვინაიდან სტრიქონები სხვადასხვა სიგრძისაა, უთანასწორო პარამეტრი დაბრუნდა 24-ივლ-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 (expr1, expr2, ..., exprn), სადაც შედეგი იქნება expr1, თუ expr 1 მნიშვნელობა არ არის NULL, წინააღმდეგ შემთხვევაში შედეგი იქნება expr2 თუ ის არ არის NULL და ა.შ. COALESCE მნიშვნელობით უდრის ჩადგმულ NVL ფუნქციებს

COALESCE(expr1, expr2) = NVL(expr1, expr2)

COALESCE(expr1, expr2, expr3) = NVL(expr1,NVL(expr2, expr3))

დაბრუნებული მნიშვნელობის მონაცემთა ტიპი, თუ აღმოჩენილია არა-NULL მნიშვნელობა, უდრის პირველი არა-NULL მნიშვნელობის მონაცემთა ტიპს. შეცდომის თავიდან ასაცილებლად „ORA-00932: მონაცემთა არათანმიმდევრული ტიპები“, ყველა არა-NULL პარამეტრი უნდა შეესაბამებოდეს პირველ არა-NULL პარამეტრს. მოდით შევხედოთ სამ მაგალითს

შეკითხვა 1: აირჩიეთ coalesce(null, null, null, 'a string') ორმაგიდან;

შეკითხვა 2: აირჩიეთ coalesce(null, null, null) dual-დან;

შეკითხვა 3: აირჩიეთ coalesce(substr('abc', 4), 'Not bc', 'No substring') dual-დან;

შეკითხვა 1 აბრუნებს მეოთხე პარამეტრს: სტრიქონს, რადგან ის არის პირველი არა NULL პარამეტრი. შეკითხვა ორი აბრუნებს NULL-ს, რადგან ყველა პარამეტრი არის NULL. შეკითხვა 3 აფასებს პირველ პარამეტრს, იღებს NULL მნიშვნელობას და აბრუნებს მეორე პარამეტრს, რადგან ის არის პირველი არა-NULL პარამეტრი.

NVL2 ფუნქციის პარამეტრები შეიძლება დამაბნეველი იყოს, თუ უკვე იცნობთ NVL ფუნქციას. NVL (ორიგინალი, ifnull) აბრუნებს ორიგინალს, თუ მნიშვნელობა არ არის NULL, წინააღმდეგ შემთხვევაში, ifnull. NVL2 (ორიგინალი, ifnotnull, ifnull) აბრუნებს ifnotnull-ს, თუ ორიგინალი არ არის NULL, წინააღმდეგ შემთხვევაში, ifnull. დაბნეულობა გამომდინარეობს იქიდან, რომ NVL ფუნქციის მეორე პარამეტრი არის ifnull, ხოლო NVL2 ფუნქცია არის ifnotnull. ასე რომ, არ დაეყრდნოთ პარამეტრის პოზიციას ფუნქციაში.

დეკოდირების ფუნქცია

ფუნქცია 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 ფუნქციის ყველა პარამეტრი შეიძლება იყოს გამოხატულება. დაბრუნებული მნიშვნელობის ტიპი უდრის პირველი დამადასტურებელი ელემენტის ტიპს - პარამეტრსკომპ 1. გამოთქმა expr 1 ირიბად გარდაიქმნება comp პარამეტრის მონაცემთა ტიპად1. ყველა სხვა ხელმისაწვდომი კომპის პარამეტრი 1...კომპN ასევე ირიბად გარდაიქმნება ტიპის კომპ 1. DECODE განიხილავს NULL მნიშვნელობას, როგორც სხვა NULL მნიშვნელობის ტოლს, ე.ი. თუ expr1 არის NULL და comp3 არის NULL და comp2 არ არის NULL, მაშინ iftrue3 დაბრუნდება. მოდით შევხედოთ რამდენიმე მაგალითს

შეკითხვა 1: აირჩიეთ decode(1234, 123, '123 არის შესატყვისი') ორმაგიდან;

შეკითხვა 2: აირჩიეთ decode(1234, 123, ‘123 is a match’, ‘No match’) ორმაგიდან;

შეკითხვა 3: აირჩიეთ decode('ძებნა', 'comp1', 'true1', 'comp2', 'true2', 'ძებნა', 'true3', substr('2search', 2, 6), 'true4', ' false') ორმაგიდან;

პირველი შეკითხვა ადარებს მნიშვნელობებს 1234 და 123. ვინაიდან ისინი არ არიან ტოლები, iftrue1 იგნორირებულია და რადგან მნიშვნელობა iffalse არ არის განსაზღვრული, დაბრუნდება NULL. მოთხოვნა ორი იდენტურია 1-ის მოთხოვნისთვის, გარდა იმისა, რომ მნიშვნელობა iffalse არის განსაზღვრული. ვინაიდან 1234 არ არის 123-ის ტოლი, ის აბრუნებს iffalse-ს - "არ ემთხვევა". შეკითხვა მესამე ამოწმებს პარამეტრის მნიშვნელობებს საძიებო მნიშვნელობის შესატყვისად. პარამეტრები comp1 და comp2 არ არის "ძიების" ტოლი, ამიტომ iftrue1 და iftrue2 შედეგები გამოტოვებულია. დამთხვევა გვხვდება კომპ3 ელემენტის მესამე შედარების ოპერაციაში (პარამეტრის პოზიცია 6) და დაბრუნდა iftrue3 (პარამეტრი 7) მნიშვნელობა, რომელიც უდრის 'true3'-ს. მას შემდეგ, რაც მატჩი მოიძებნა, მეტი გამოთვლები არ კეთდება. ანუ, იმისდა მიუხედავად, რომ comp4-ის (პარამეტრი 8) მნიშვნელობა ასევე ემთხვევა expr1-ს, ეს გამოთქმა არასოდეს გამოითვლება, რადგან დამთხვევა ნაპოვნი იქნა წინა შედარებაში.

CASE გამოხატულება

ყველა მესამე და მეოთხე თაობის პროგრამირების ენა ახორციელებს ქეისის კონსტრუქციას. DECODE ფუნქციის მსგავსად, CASE გამოხატულება საშუალებას გაძლევთ განახორციელოთ if-then-else ლოგიკა. CASE გამოხატვის გამოყენების ორი ვარიანტი არსებობს. მარტივი CASE გამოხატულება აყენებს ორიგინალ ელემენტს შედარებას ერთხელ და შემდეგ ჩამოთვლის ყველა საჭირო პირობებიჩეკები. რთული (მოძიებული) CASE აფასებს ორივე განცხადებას თითოეული პირობისთვის.

CASE გამოხატულებას აქვს სამი საჭირო პარამეტრი. გამოხატვის სინტაქსი დამოკიდებულია ტიპზე. მარტივი CASE გამოხატვისთვის ეს ასე გამოიყურება

CASE search_expr

როდესაც შედარებით_expr1, მაშინ iftrue1

)

TRUNC ფუნქცია აბრუნებს რიცხვს n-ს, შეკვეცილს m ათობითი ადგილებში. 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-ს. თუ n უარყოფითია, ის უბრუნებს -1-ს. თუ ნულის ტოლია, მაშინ ბრუნდება 0, მაგალითად:

SELECT SIGN(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3

DUAL-დან

ამ ფუნქციის საინტერესო თვისებაა m ნულის ტოლი გადაცემის უნარი 0-ზე გაყოფის გამოწვევის გარეშე.

ფუნქცია POWER(n, m)

POWER ფუნქცია ზრდის n რიცხვს m ხარისხამდე. ხარისხი შეიძლება იყოს წილადი და უარყოფითი, რაც მნიშვნელოვნად აფართოებს ამ ფუნქციის შესაძლებლობებს.

SELECT 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

ზოგიერთ შემთხვევაში, გამონაკლისი შეიძლება მოხდეს ამ ფუნქციის გამოძახებისას. Მაგალითად:

SELECT 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

გააზიარეთ