مقدمه :
در پایگاه داده اوراکل نگارش ۲۳c امکان جدیدی در خصوص استفاده دستور Simple Case معرفی شده که در این مستند آن را مورد بررسی قرار می دهیم.
برای نصب پایگاه داده اوراکل ۲۳c به این مقاله مراجعه کنید.
create table test (
id number,
salary number
);
insert into test (id, salary)
values (1,2000), (2,1500), (3,1400), (4,4000), (5,3000), (6,2800), (7,1190), (8,4300), (9,2300);
commit;
در نگارش های گذشته در زمان استفاده از Simple Case حتما باید از شرط مساوی استفاده می کردیم در صورتی که از شرط های نا مساوی بخواهیم استفاده کنیم باید از Searched Case استفاده کنیم.
set serveroutput on
declare
salary_class varchar2(20);
begin
for c_v in (select salary from test) loop
case
when c_v.salary >= 4000 then salary_class := ‘hi’;
when c_v.salary >= 2000 then salary_class := ‘mid’;
when c_v.salary >= 1000 then salary_class := ‘low’;
when c_v.salary < 1000 then salary_class := ‘bad salary’;
end case;
dbms_output.put_line(c_v.salary|| ‘ : ‘ || l_salary_class);
end loop;
end;
/
۲۰۰۰: mid
۱۵۰۰: low
۱۴۰۰: low
۴۰۰۰: hi
۳۰۰۰: mid
۲۸۰۰: mid
۱۱۹۰: low
۴۳۰۰: hi
۲۳۰۰: mid
PL/SQL procedure successfully completed.
SQL>
با قابلیت جدید معرفی شده، دستور فوق را می توان به این حالت با استفاده از simple case نوشت.
set serveroutput on
declare
salary_class varchar2(20);
begin
for c_v in (select salary from test) loop
case
c_v.salary
when >= 4000 then salary_class := ‘hi’;
when >= 2000 then salary_class := ‘mid’;
when >= 1000 then salary_class := ‘low’;
when > 1000 90 then salary_class := ‘ bad salary’;
end case;
dbms_output.put_line(c_v.salary|| ‘ : ‘ || l_salary_class);
end loop;
end;
/
۲۰۰۰: mid
۱۵۰۰: low
۱۴۰۰: low
۴۰۰۰: hi
۳۰۰۰: mid
۲۸۰۰: mid
۱۱۹۰: low
۴۳۰۰: hi
۲۳۰۰: mid
PL/SQL procedure successfully completed.
SQL>
اگر برای هربررسی چند شرط داشته باشیم، می توان به صورت زیر آن را پیاده سازی کرد.
set serveroutput on
declare
salary_class varchar2(20);
begin
for c_v in (select salary from test) loop
case
c_v.salary
when > 10000, <= 200000 then salary_class := ‘WOW!!’;
when >= 4000, <= 10000 then salary_class := ‘very hi’;
when >= 4000 then salary_class := ‘hi’;
when >= 2000 then salary_class := ‘mid’;
when >= 1000 then salary_class := ‘low’;
when > 1000 90 then salary_class := ‘ bad salary’;
end case;
dbms_output.put_line(c_v.salary|| ‘ : ‘ || l_salary_class);
end loop;
end;
/
برای از ساختار چند شرط در دستورات sql به طور مستقیم، با خطا مواجه خواهیم شد که راهکار آن استفاده function به صورت inline در ساختار with clause می باشد. در ادامه به نمونه کد توجه نمایید.
with
function get_class(salary in number) return varchar2 is
begin
return case salary
when > 10000, <= 200000 then salary_class := ‘WOW!!’;
when >= 4000, <= 10000 then salary_class := ‘very hi’;
when >= 4000 then salary_class := ‘hi’;
when >= 2000 then salary_class := ‘mid’;
when >= 1000 then salary_class := ‘low’;
when > 1000 90 then salary_class := ‘ bad salary’;
end;
end;
select salary, get_class(salary) as salary_class
from test
/
salary salary_class
———- —————————————-
۲۰۰۰ mid
۱۵۰۰ low
۱۴۰۰ low
۴۰۰۰ hi
۳۰۰۰ mid
۲۸۰۰ mid
۱۱۹۰ low
۴۳۰۰ hi
۲۳۰۰ mid
یرای خدمات آموزش، مشاوره و نگهداری راه کارهای پایگاه داده اوراکل با ما درارتباط باشید.