توضیحات Nvl sql. تبدیل NVL برای انواع مختلف داده

کمی پیشتر به توابع تو در تو پرداختیم، حالا بیایید با جزئیات بیشتری به آنها نگاه کنیم. ما همچنین به توابعی برای کار با مقدار 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') را از dual انتخاب کنید.

  1. سه تابع در این عبارت از پایین به بالا وجود دارد - SYSDATE، LAST_DAY، NEXT_DAY. درخواست به این صورت است
  2. تابع SYSDATE تو در تو اجرا می شود. زمان فعلی سیستم را برمی گرداند. فرض کنید تاریخ فعلی 28 اکتبر 2009 است
  3. سپس، نتیجه تابع سطح دوم LAST_DAY محاسبه می شود. LAST_DATE ('28-OCT-2009') آخرین روز اکتبر 2009، یعنی 31 اکتبر 2009 برمی گردد.
  4. سپس هفت روز از این تاریخ کم می شود - 24 اکتبر به دست می آید.
  5. در نهایت، تابع NEXT_DAY('24-OCT-2009'، 'Tue') ارزیابی می شود و پرس و جو آخرین سه شنبه ماه اکتبر را برمی گرداند - که در مثال ما 27-OCT-2009 است.

درک و ساخت عبارات پیچیده با استفاده از فراخوانی های توابع تودرتو بسیار دشوار است، اما این با زمان و تمرین همراه است. می توانید چنین عباراتی را به قسمت هایی تقسیم کرده و جداگانه تست کنید. جدول DUAL برای آزمایش کوئری ها و نتایج فراخوانی تابع بسیار مفید است. می‌توانید مؤلفه‌های کوچک را آزمایش و اشکال‌زدایی کنید، که سپس در یک عبارت بزرگ دلخواه ترکیب می‌شوند.

توابع شعبه

توابع شاخه، همچنین به عنوان IF-THEN-ELSE شناخته می شود، برای تعیین مسیر اجرا بسته به شرایط خاص استفاده می شود. توابع شاخه بر اساس نتیجه ارزیابی شرایط، نتایج متفاوتی را برمی‌گردانند. در گروه چنین توابعی، توابعی برای کار با مقدار NULL وجود دارد: NVL، NVL2، NULLIF و COALESCE. و همچنین توابع کلی که با تابع DECODE و عبارت CASE نشان داده می شوند. تابع DECODE یک تابع Oracle است، در حالی که عبارت CASE در استاندارد ANSI SQL است.

تابع NVL

تابع NVL مقدار یک ستون یا عبارت از هر نوع داده را برای یک مقدار تهی بررسی می کند. اگر مقدار NULL باشد، یک مقدار پیش‌فرض غیر NULL جایگزین برمی‌گرداند، در غیر این صورت مقدار اصلی برگردانده می‌شود.

تابع NVL دارای دو پارامتر مورد نیاز است و نحو NVL (اصل، ifnull) است که در آن original مقدار اصلی است که باید بررسی شود و ifnull نتیجه ای است که توسط تابع در صورت NULL است. نوع داده پارامترهای ifnull و اصلی باید سازگار باشد. یعنی یا نوع داده باید یکسان باشد یا اینکه امکان تبدیل ضمنی مقادیر از یک نوع به نوع دیگر وجود داشته باشد. تابع NVL مقداری از نوع داده مشابه با نوع داده پارامتر اصلی را برمی‌گرداند. سه پرس و جو را در نظر بگیرید

Query 1: nvl(1234) را از dual انتخاب کنید.

Query 2: nvl(null, 1234) را از dual انتخاب کنید.

Query 3: nvl(substr('abc', 4), 'No substring exists') را از dual انتخاب کنید.

از آنجایی که تابع NVL به دو پارامتر نیاز دارد، query 1 یک خطای ORA-00909: تعداد نامعتبر آرگومان ها را برمی گرداند. Query 2 1234 را برمی گرداند زیرا NULL در حال بررسی است و NULL است. کوئری سه از یک تابع SUBSTR تو در تو استفاده می کند که سعی می کند کاراکتر چهارم را از یک رشته سه کاراکتری استخراج کند، NULL را برمی گرداند و تابع NVL رشته «No sbusstring وجود دارد» را برمی گرداند.

تابع NVL هنگام کار با اعداد بسیار مفید است. برای تبدیل مقادیر NULL به 0 استفاده می شود تا عملیات حسابیبیش از اعداد NULL برنگرداند

تابع NVL2

تابع NVL2 عملکرد بیشتری نسبت به NVL ارائه می دهد، اما NULL را نیز کنترل می کند. مقدار یک ستون یا عبارت از هر نوع را برای یک مقدار تهی بررسی می کند. اگر مقدار NULL نباشد، پارامتر دوم برگردانده می شود، در غیر این صورت پارامتر سوم برگردانده می شود، برخلاف تابع NVL که در این حالت مقدار اصلی را برمی گرداند.

تابع NVL2 دارای سه پارامتر مورد نیاز است و نحو NVL2 (اصل، ifnotnull، ifnull) است، که در آن original مقداری است که باید آزمایش شود، ifnotnull مقداری است که باید برگردانده شود اگر اصلی NULL نباشد، و ifnull مقداری است که باید برگردانده شود اگر اصلی باشد. خالی. انواع داده های پارامترهای ifnotnull و ifnull باید سازگار باشند و نمی توانند از نوع LONG باشند. نوع داده برگردانده شده توسط تابع NVL2 برابر با نوع داده پارامتر ifnotnull است. بیایید به چند نمونه نگاه کنیم

Query 1: nvl2 (1234, 1, 'a string') را از dual انتخاب کنید.

Query 2: nvl2 (null, 1234, 5678) را از dual انتخاب کنید.

پرس و جو 3: nvl2(substr('abc', 2), 'Not bc', 'No substring') را از dual انتخاب کنید.

پارامتر ifnotnull در query 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 و در غیر این صورت پارامتر ifunequal را برمی گرداند. درخواست ها را در نظر بگیرید

Query 1: nullif(1234, 1234) را از dual انتخاب کنید.

Query one NULL را برمی گرداند زیرا پارامترها یکسان هستند. رشته های پرس و جو 2 به تاریخ تبدیل نمی شوند، بلکه به عنوان رشته ها مقایسه می شوند. از آنجایی که طول رشته ها متفاوت است، پارامتر ifunequal 24-JUL-2009 برگردانده می شود.

در شکل 10-4، تابع NULLIF درون تابع NVL2 قرار گرفته است. تابع NULLIF به نوبه خود از توابع SUBSTR و UPPER به عنوان بخشی از عبارت در پارامتر ifunequal استفاده می کند. ستون EMAIL با این عبارت مقایسه می‌شود، که حرف اول نام همراه با نام خانوادگی را برای کارمندانی که نام کوچکشان 4 کاراکتر است را برمی‌گرداند. وقتی این مقادیر برابر باشند، NULLIF NULL را برمی گرداند، در غیر این صورت مقدار پارامتر ifunequal را برمی گرداند. این مقادیر به عنوان پارامتری برای تابع NVL2 استفاده می شود. NVL2 به نوبه خود شرحی از مطابقت یا عدم تطابق عناصر مقایسه شده را برمی‌گرداند.

شکل 10-4 - با استفاده از تابع NULLIF

تابع COALESCE

تابع COALESCE اولین مقدار غیر NULL را از لیست پارامترها برمی گرداند. اگر تمام پارامترها NULL باشند، NULL برگردانده می شود. تابع COALESCE دو پارامتر مورد نیاز و هر تعداد پارامتر اختیاری دارد و نحو COALESCE (expr1, expr2, ..., exprn) که در آن اگر مقدار expr 1 NULL نباشد نتیجه expr1 است و در غیر این صورت نتیجه 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 سازگار باشند. سه مثال را در نظر بگیرید

Query 1: coalesce (null, null, null, 'a string') را از dual انتخاب کنید.

Query 2: coalesce (null, null, null) را از dual انتخاب کنید.

Query 3: coalesce(substr('abc', 4), 'Not bc', 'No substring') را از dual انتخاب کنید.

Query 1 پارامتر چهارم را برمی گرداند: یک رشته، زیرا اولین پارامتر غیر NULL است. Query Two NULL را برمی گرداند زیرا تمام پارامترها NULL هستند. کوئری 3 پارامتر اول را ارزیابی می کند، NULL دریافت می کند و پارامتر دوم را برمی گرداند زیرا اولین پارامتر غیر NULL است.

اگر از قبل با تابع NVL آشنا باشید، پارامترهای تابع NVL2 می تواند گیج کننده باشد. اگر مقدار NULL نباشد، NVL (اصل، ifnull) اصل را برمی‌گرداند، در غیر این صورت ifnull. NVL2 (اصل، ifnotnull، ifnull) ifnotnull را برمی‌گرداند اگر اصلی نباشد در غیر این صورت ifnull. سردرگمی از این واقعیت ناشی می شود که پارامتر دوم تابع 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 با هم مقایسه می‌شوند و اگر true باشد، iftrueN در صورت برابری برگردانده می‌شود. اگر در هیچ مجموعه ای از پارامترها مطابقت یافت نشد، اگر این پارامتر مشخص شده بود، iffalse برگردانده می شود یا NULL.

تمام پارامترهای تابع DECODE می توانند عبارت باشند. نوع مقدار بازگشتی برابر با نوع اولین اعتباردهنده - پارامتر است comp 1. Expression expr 1 به طور ضمنی به نوع داده پارامتر comp تبدیل می شود1. همه گزینه های دیگر comp در دسترس است 1 … compN همچنین به طور ضمنی به نوع comp تبدیل می شوند 1. DECODE یک مقدار NULL را برابر با مقدار NULL دیگر در نظر می گیرد، یعنی. اگر expr1 NULL و comp3 NULL و comp2 NULL نیست، iftrue3 برگردانده می شود. بیایید به چند نمونه نگاه کنیم

Query 1: decode(1234, 123, '123 is a match') را از dual انتخاب کنید.

Query 2: decode(1234, 123, '123 is a match', 'No match') را از dual انتخاب کنید.

Query 3: decode('search', 'comp1', 'true1', 'comp2', 'true2', 'search', 'true3', substr('2search', 2, 6), 'true4', ' را انتخاب کنید false') از dual;

کوئری یک مقدار 1234 و 123 را با هم مقایسه می کند. از آنجایی که آنها برابر نیستند، iftrue1 نادیده گرفته می شود، و از آنجایی که iffalse تعریف نشده است، NULL برگردانده می شود. کوئری دو با پرس و جو 1 یکسان است با این تفاوت که مقدار iffalse تعریف شده است. از آنجایی که 1234 برابر با 123 نیست، اگر اشتباه باشد - "بدون مطابقت" برگردانده می شود. کوئری سه مقادیر پارامتر را در برابر مقدار جستجو بررسی می کند. پارامترهای comp1 و comp2 برابر با 'جستجو' نیستند، بنابراین نتایج iftrue1 و iftrue2 نادیده گرفته می شوند. یک مطابقت در سومین عملیات مقایسه عنصر comp3 (موقعیت پارامتر 6) یافت می شود و مقدار بازگشتی iftrue3 (پارامتر 7) 'true3' است. از آنجایی که مطابقت یافت می شود، دیگر محاسباتی انجام نمی شود. یعنی علیرغم اینکه مقدار comp4 (پارامتر 8) با expr1 نیز مطابقت دارد، این عبارت هرگز ارزیابی نمی شود زیرا مطابقت در مقایسه قبلی پیدا شد.

عبارت CASE

تمام زبان های برنامه نویسی نسل سوم و چهارم ساختار case را پیاده سازی می کنند. مانند تابع DECODE، عبارت CASE به شما امکان می دهد منطق if-then-else را پیاده سازی کنید. دو گزینه برای استفاده از عبارت CASE وجود دارد. یک دستور CASE ساده، عنصر منبع را برای مقایسه یک بار تنظیم می کند و سپس تمام شرایط تست لازم را فهرست می کند. CASE پیچیده (جستجو شده) هر دو عبارت را برای هر شرط ارزیابی می کند.

عبارت CASE دارای سه پارامتر مورد نیاز است. نحو یک عبارت به نوع آن بستگی دارد. برای یک عبارت CASE ساده به نظر می رسد این است

CASE search_expr

WHEN krahasim_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 را برمی گرداند. اگر منفی باشد، -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

V این موردسعی شده است جذر یک عدد منفی محاسبه شود که منجر به خطای ORA-01428 "Argument out of range" می شود.

تابع SQRT(n)

این تابعبرمی گرداند ریشه دوماز شماره n برای مثال:

SQRT(100) X را انتخاب کنید

از DUAL

توابع EXP(n) و LN(n).

تابع EXP e را به توان n می رساند و تابع LN لگاریتم طبیعی n را محاسبه می کند (با n باید بزرگتر از صفر باشد). مثال:

SELECT 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 تغییر کرده اند بنابراین ممکن است با مقادیر شما مطابقت نداشته باشند.

راه حل:

first_name را به‌عنوان "نام"، نام خانوادگی را به عنوان "نام خانوادگی"، نام خانوادگی را به عنوان "نام خانوادگی"، TO_CHAR(دستمزد، "L999999999.99") به عنوان "حقوق" از hr.employees انتخاب کنید.

توابع TO_NUMBER و TO_DATE

تابع تبدیل رشته به تاریخ TO_DATE (رشته، قالب). مقادیر قالب ممکن قبلاً در بالا مورد بحث قرار گرفته است، بنابراین من چند نمونه از استفاده از این تابع را ارائه خواهم کرد. مثال ها:

انتخاب کنید TO_DATE ("01/01/2010"، "DD.MM.YYYY") از جانب DUAL تاریخ "01.01.2010" را برمی گرداند.

انتخاب کنید TO_DATE ("01.01.2010"، "DD.MON.YYYY") از جانب DUAL تاریخ "01.01.2009" را برمی گرداند.

انتخاب کنید TO_DATE ("15-01-10"، "DD-MM-YY") از جانب DUAL تاریخ "01/15/2010" را برمی گرداند.

تابعی برای تبدیل رشته به مقدار عددی TO_NUMBER (رشته، قالب). رایج ترین مقادیر قالب در جدول ذکر شده است، بنابراین بیایید استفاده از این تابع را با استفاده از مثال ها در نظر بگیریم. مثال ها:

انتخاب کنید TO_NUMBER ('100") از جانب DUAL عدد 100 را SELECT TO_NUMBER(`0010.01", "9999D99") برمی گرداند. از جانب DUAL عدد 10.01 را برمی گرداند.

انتخاب کنید TO_NUMBER("500000"، "999G999") از جانب DUAL عدد 500000 را برمی گرداند.

عنصر RR در قالب تاریخ

عنصر فرمت تاریخ و زمان RR مشابه عنصر قالب تاریخ و زمان YY است، اما انعطاف‌پذیری بیشتری برای ذخیره مقادیر تاریخ در قرن‌های دیگر فراهم می‌کند. عنصر قالب RR datetime به شما امکان می دهد تاریخ های قرن بیستم را در قرن بیست و یکم فقط با مشخص کردن دو رقم آخر سال ذخیره کنید.

اگر دو رقم آخر سال جاری 00 تا 49 باشد، سال برگشتی همان دو رقم اول سال جاری را دارد.

اگر دو رقم آخر سال جاری بین 50 تا 99 باشد، 2 رقم اول سال برگشتی 1 بزرگتر از 2 رقم اول سال جاری است.

اگر دو رقم آخر سال جاری از 00 تا 49 باشد، پس 2 رقم اول سال برگشتی 1 کمتر از دو رقم اول سال جاری است.

اگر دو رقم آخر سال جاری بین 50 تا 99 باشد، سال برگشتی همان دو رقم اول سال جاری را دارد.

تابع NVL

تابع NVL معمولاً بیشترین استفاده را دارد. تابع دو پارامتر دریافت می کند: NVL(expr1,expr2). اگر اولین پارامتر expr1 NULL نباشد، تابع مقدار خود را برمی‌گرداند. اگر پارامتر اول NULL باشد، تابع مقدار پارامتر دوم exp2 را برمی گرداند.

مثال: NVL (supplier_city، n/a") را از تامین کنندگان انتخاب کنید:

در عبارت SQL در بالا، اگر فیلد provider_city حاوی مقدار null باشد، n/" را برمی گرداند. در غیر این صورت، مقدار source_city را برمی گرداند.

مثال دیگری از استفاده از تابع NVL در Oracle/PLSQL این است:

provider_id، NVL (supplier_desc، source_name) را از تامین کنندگان انتخاب کنید.

این دستور SQL باز خواهد گشت تامین کننده_ناممیدان اگر تامین کننده_ توصیفحاوی یک مقدار تهی است. در غیر این صورت برمی گردد تامین کننده_ توصیف.

مثال آخر: استفاده از تابع NVL در Oracle/PLSQL به این صورت است: NVL(commission, 0) را از فروش انتخاب کنید.

این دستور SQL مقدار 0 if را برمی گرداند کمیسیونفیلد حاوی یک مقدار تهی است. وگرنه برمی گشت کمیسیون هارشته.

تبدیل NVL برای انواع مختلف داده

برای تبدیل یک مقدار تعریف نشده به مقدار واقعی، از تابع NVL استفاده کنید: NVL ( بیان1، بیان2), جایی که:

بیان 1-مقدار اصلی یا محاسبه شده، که ممکن است تهی باشد.

بیان 2- مقداری که جایگزین مقدار null می شود.

توجه داشته باشید:تابع 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)

راه حل:

کد درخواست مربوطه ممکن است به شکل زیر باشد:

first_name را به عنوان "First Name"، last_name را به عنوان "Last Name"، NVL (COMMISSION_PCT، 0) را به عنوان "Commission Rate" از hr.employees انتخاب کنید.

تابع NVL

تابع NVL معمولاً بیشترین استفاده را دارد. تابع دو پارامتر دریافت می کند: NVL(expr1,expr2). اگر اولین پارامتر expr1 NULL نباشد، تابع مقدار خود را برمی‌گرداند. اگر پارامتر اول NULL باشد، تابع مقدار پارامتر دوم expr2 را برمی گرداند.

در نظر گرفتن مثال عملی. فیلد COMM در جدول EMP می تواند حاوی مقادیر 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 TURNER 0 0
7900 جیمز 0
7902 آب کم عمق 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 را برمی گرداند. اگر منفی باشد، -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 "Argument out of range" می شود.

تابع SQRT(n)

این تابع جذر n را برمی گرداند. برای مثال:

SQRT(100) X را انتخاب کنید

از DUAL

توابع EXP(n) و LN(n).

تابع EXP e را به توان n می رساند و تابع LN لگاریتم طبیعی n را محاسبه می کند (با n باید بزرگتر از صفر باشد). مثال:

SELECT EXP(2) X1، LN(1) X2، LN(EXP(2)) X3