زنگ

کسانی هستند که این خبر را قبل از شما می خوانند.
برای دریافت مطالب تازه مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید The Bell را بخوانید
بدون اسپم

عملکرد TO_CHAR با شماره

توابع تبدیل داده به انواع دیگر داده ها. TO_CHAR (شماره) یک عدد را به متن تبدیل می کند. TO_NUMBER (رشته) متن را به یک عدد تبدیل می کند.

SELECT TO_CHAR (123) از DUAL رشته 123 را باز می گرداند ، SELECT TO_NUMBER (`12345") از DUAL شماره 12345 را برمی گرداند.

کار آزمایشگاهی. قالب اعداد نمایش داده شده را تغییر دهید

تغییر در قالب مقادیر عددی در عملکرد Oracle SQL ، TO_CHAR برای کار با مقادیر عددی.

وظیفه:

پرسشی را بنویسید که اطلاعات مربوط به نام ، نام خانوادگی و حقوق کارمندان را از جدول hr.employees با فرمت نشان داده شده در شکل نشان می دهد. 3.4-1:

شکل. 3.4 -1

در همان زمان ، داده ها باید طبقه بندی شوند تا اولین ردیف برای کارمندان با بالاترین حقوق نمایش داده شود.

توجه داشته باشید:

برخی از مقادیر حقوق در شکل. 3.4-1 تغییر کرده است ، بنابراین ممکن است با مقادیر شما مطابقت نداشته باشد.

تصمیم:

نام و نام خانوادگی را انتخاب کنید "نام" ، نام خانوادگی به عنوان "نام خانوادگی" ، TO_CHAR (SALARY ، "L999999999.99") به عنوان "حقوق" از hr.employment کارمندان تحت سفارش سالاری DESC.

توابع TO_NUMBER و TO_DATE

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

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

انتخاب کنید  TO_DATE ("01.JAN.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 ("500،000" ، "999G999") از جانب  DUAL شماره 500000 را برمی گرداند.

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

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

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

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

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

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

عملکرد NVL

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

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

عبارت SQL فوق اگر در قسمت تأمین کننده مقدار null مقدار n / a را برگرداند ، در غیر این صورت مقدار تأمین کننده_City را برمی گرداند.

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

از تأمين كنندگان ، furnitorid_id ، NVL (را تأييد كنيد.

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

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

اگر این عبارت SQL باشد مقدار 0 را در صورت بازگشت کمیسیون  این قسمت دارای مقدار null است. در غیر این صورت ، باز می گردد کمیسیون ها  رشته.

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

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

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

بیان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) به عنوان "نرخ کمیسیون" از کارمندان hr.em.

  عملکرد NVL

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

یک مثال عملی را در نظر بگیرید. قسمت COMM در جدول EMP ممکن است مقادیر NULL باشد. هنگام اجرای پرس و جو از فرم:

SELECT EMPNO ، ENAME ، COMM ، NVL (COMM ، 0) NVL_COMM

از SCOTT.EMP

مقدار NULL با صفر جایگزین می شود. لطفاً توجه داشته باشید که اگر مقداری با استفاده از عملکرد ایجاد شود ، نام مستعار به آن اختصاص داده می شود. نتایج پرس و جو مانند خواهد بود:

EMPNO ENAME کمیته NVL_COMM
7369 اسمیت 0
7499 ALLEN 300 300
7521 بخش 500 500
7566 جونز 0
7654 مارتین 1400 1400
7698 BLAKE 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

تابع ثبت نام (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 خارج از محدوده" می شود.

عملکرد SQRT (n)

این عملکرد ، ریشه مربعی n را برمی گرداند. برای مثال:

SELECT 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

  عملکرد NVL

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

یک مثال عملی را در نظر بگیرید. قسمت COMM در جدول EMP ممکن است مقادیر NULL باشد. هنگام اجرای پرس و جو از فرم:

SELECT EMPNO ، ENAME ، COMM ، NVL (COMM ، 0) NVL_COMM

از SCOTT.EMP

مقدار NULL با صفر جایگزین می شود. لطفاً توجه داشته باشید که اگر مقداری با استفاده از عملکرد ایجاد شود ، نام مستعار به آن اختصاص داده می شود. نتایج پرس و جو مانند خواهد بود:

EMPNO ENAME کمیته NVL_COMM
7369 اسمیت 0
7499 ALLEN 300 300
7521 بخش 500 500
7566 جونز 0
7654 مارتین 1400 1400
7698 BLAKE 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

تابع ثبت نام (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 خارج از محدوده" می شود.

عملکرد SQRT (n)

این عملکرد ، ریشه مربعی n را برمی گرداند. برای مثال:

SELECT 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

ما کمی زودتر به کارکردهای تو در تو در تو لمس کردیم ، حالا آنها را با جزئیات بیشتری بررسی خواهیم کرد. ما همچنین توابع کار با مقدار NULL و کارکردهایی را که به اجرای عملیات شعبه در پرس و جو کمک می کند ، در نظر می گیریم.

توابع تو در تو

توابع تودرتو از مقدار برگشتی یک تابع به عنوان یک پارامتر ورودی به عملکرد دیگر استفاده می کنند. توابع همیشه فقط یک مقدار را برمی گردانند. بنابراین ، هنگامی که از آن به عنوان پارامتر برای فراخوانی یک تابع دیگر استفاده می کنید ، می توانید نتیجه یک فراخوانی عملکرد را به عنوان یک مقدار تحت اللفظی در نظر بگیرید. توابع رشته را می توان در هر سطح لانه سازی لانه کرد. یک تماس عملکردی به این شکل است

Function1 (parameter1، parameter2، ...) \u003d نتیجه

جایگزینی یک پارامتر تابع با فراخوانی به عملکرد دیگر ممکن است منجر به بیان فرم شود

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 ، "سه شنبه") را از دوتایی انتخاب کنید؛

  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" ، "سه شنبه") محاسبه می شود ، و پرس و جو آخرین سه\u200cشنبه اکتبر را بازگرداند - که در مثال ما 27-OCT-2009 است.

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

توابع شعبه

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

عملکرد NVL

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

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

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

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

پرس و جو 3: nvl (substr ("abc" ، 4) ، "هیچ بستر وجود ندارد") را از dual انتخاب کنید.

از آنجا که عملکرد NVL به دو پارامتر نیاز دارد ، پرس و جو 1 خطای ORA-00909 را برمی گرداند: تعداد نامعتبر بودن آرگومان ها. Query 2 1234 را چک می کند ، زیرا NULL را بررسی می کند و NULL است. پرس و جو سه با استفاده از یک تابع SUBSTR در تو در تو قرار دارد که سعی می کند شخصیت چهارم را از یک رشته سه کاراکتر استخراج کند ، NULL را بازمی گرداند ، و عملکرد NVL یک رشته را می دهد "هیچ خیره کننده ای نیست".

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

عملکرد NVL2

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

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

پرس و جو 1: nvl2 (1234 ، 1 ، "رشته") را از دوتایی انتخاب کنید.

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

پرس و جو 3: nvl2 (substr ("abc" ، 2) ، "not bc" ، "no substring") را از دوتایی انتخاب کنید.

پارامتر ifnotnull در درخواست 1 یک عدد است و پارامتر ifnull یک رشته است. از آنجا که انواع داده ها ناسازگار هستند ، خطای "ORA-01722: شماره نامعتبر" برمی گردد. درخواست دو پارامتر ifnull را برگردانید ، زیرا اصلی NULL است و نتیجه آن 5678 خواهد بود. درخواست سه مورد استفاده از عملکرد SUBSTR است که "bc" را برمی گرداند و NVL2 نامیده می شود ("bc" ، "not bc" ، "no substring") - که پارامتر ifnotnull را برمی گرداند. - "بی سی" نیست.

عملکرد nullif

عملکرد NULLIF دو مقدار را برای هویت بررسی می کند. اگر آنها یکسان باشند ، NULL بازگردانده می شود ، در غیر این صورت ، اولین پارامتر بازگردانده می شود. عملکرد NULLIF دارای دو پارامتر مورد نیاز و نحو NULLIF (ifunequal ، sharing_item). تابع دو پارامتر را مقایسه می کند ، و اگر یکسان باشند ، NULL را باز می گرداند ، در غیر این صورت پارامتر ifunequal. درخواستها را در نظر بگیرید

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

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

COALESCE (expr1 ، expr2) \u003d NVL (expr1 ، expr2)

COALESCE (expr1 ، expr2 ، expr3) \u003d NVL (expr1 ، NVL (expr2 ، expr3))

نوع داده مقدار بازگشت در صورت یافتن مقدار غیر NULL برابر با نوع داده اولین مقدار غیر NULL است. برای جلوگیری از خطای "ORA-00932: انواع داده متناقض" ، همه پارامترهای غیر NULL باید با اولین پارامتر غیر NULL سازگار باشند. اجازه دهید سه مثال را در نظر بگیریم

پرس و جو 1: انسداد (تهی ، تهی ، تهی ، "رشته") را از دوتایی انتخاب کنید.

پرس و جو 2: انسجام (تهی ، تهی ، تهی) را از دوتایی انتخاب کنید.

پرس و جو 3: انسجام را انتخاب کنید (substr ("abc" ، 4) ، "not bc" ، "no substring") از دوتایی؛

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

اگر از قبل با عملکرد NVL آشنا باشید ، پارامترهای عملکرد NVL2 می تواند گیج کننده باشد. اگر مقدار NULL نباشد NVL (اصلی ، ifnull) اصلی را برمی گرداند ، در غیر اینصورت ifnull. NVL2 (اصلی ، ifnotnull ، ifnull) اگر اصلی باشد NULL نیست ، در غیر اینصورت ifnull است. سردرگمی به این دلیل است که پارامتر دوم عملکرد NVL غیر عادی است ، در حالی که برای NVL2 ifnotnull است. بنابراین به موقعیت پارامتر در تابع اعتماد نکنید.

عملکرد دکمه

تابع DECODE با بررسی دو پارامتر اول برای برابری و بازگرداندن مقدار سوم در صورت برابری یا مقدار دیگر در صورت نابرابری ، منطق if-then-other را پیاده سازی می کند. تابع DECODE دارای سه پارامتر مورد نیاز و نحو DECODE (expr1 ، comp1 ، iftrue1 ،). این پارامترها همانطور که در مثال شبه کد زیر نشان داده شده استفاده می شوند.

اگر expr1 \u003d comp1 سپس iftrue1 را برگردانید

اگر expr1 \u003d comp2 بود ، iftrue2 را برگردانید

اگر exprN \u003d compN باشد ، iftrueN را برگردانید

بازگشت دیگر NULL | iffalse؛

اول ، expr1 با comp1 مقایسه می شود. اگر آنها برابر باشند ، مقدار iftrue1 بازگردانده می شود. اگر expr1 برابر با comp1 نباشد ، آنچه در آینده اتفاق می افتد بستگی به این دارد که comp2 و iftrue2 تنظیم شده باشند. در صورت مشخص شدن ، مقدار expr1 با comp2 مقایسه می شود. اگر مقادیر مساوی باشند ، iftrue2 بازگردانده می شود. اگر نه ، پس اگر جفت compN وجود دارد ، پارامترهای iftrueN ، expr1 و compN مقایسه می شوند و iftrueN در صورت برابری بازگردانده می شود. اگر در هر پارامتر پارامتری یافت نشد ، اگر این پارامتر مشخص شده باشد ، یا NULL بازگردانده می شود.

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

پرس و جو 1: رمزگشایی را انتخاب کنید (1234 ، 123 ، 123 a یک مسابقه است) از دوتایی؛

پرس و جو 2: رمزگشایی را انتخاب کنید (1234، 123، ‘123 یک مسابقه است '،' بدون مسابقه ') از دوتایی؛

پرس و جو 3: رمزگشایی را انتخاب کنید ("جستجو" ، "comp1" ، "true1" ، "comp2" ، "true2" ، "جستجو" ، "true3" ، substr ("2search" ، 2 ، 6) ، "true4" ، " false ') از dual؛

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

بیان مورد

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

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

CASE search_expr

WHEN مقایسه_expr1 THEN iftrue1

}

زنگ

کسانی هستند که این خبر را قبل از شما می خوانند.
برای دریافت مطالب تازه مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید The Bell را بخوانید
بدون اسپم