در پایگاه داده اوراکل ۲۳c امکان جدیدی معرفی شده که شما می توانید از توابع جمع (SUM ) و میانگین (AVG ) (توابع تجمیع کننده ( بر روی داده های از نوع مدت زمان (INTERVAL ) استفاده کنید. باید اشاره کرد این امکان در توابع MAX وMIN و توابع تحلیلی در نگارش های گذشته وجود داشت.
مستند و فیلم نصب راه اندازه پایگاه داده Oracle 23c در محیط لینوکس
drop table if exists t1 purge;
create table t1 (
id number,
start_time timestamp,
end_time timestamp,
duration interval day to second generated always as (end_time – start_time) virtual
);
insert into t1 (id, start_time, end_time) values (1, timestamp ‘2023-04-10 08:45:00.0’, timestamp ‘2023-04-10 18:01:00.0’);
insert into t1 (id, start_time, end_time) values (2, timestamp ‘2023-04-11 09:00:00.0’, timestamp ‘2023-04-11 17:00:00.0’);
insert into t1 (id, start_time, end_time) values (3, timestamp ‘2023-04-12 08:00:00.0’, timestamp ‘2023-04-12 17:45:00.0’);
insert into t1 (id, start_time, end_time) values (4, timestamp ‘2023-04-13 07:00:00.0’, timestamp ‘2023-04-13 16:00:00.0’);
commit;
فرمت نمایش زمان و تاریخ را برای خوانایی بهتردر session جاری تغییر می دهیم
alter session set nls_timestamp_format=’yyyy-mm-dd hh24:mi:ss’;
select * from t1;
ID START_TIME END_TIME DURATION
———- ——————– ——————– ——————–
۱ ۲۰۲۳-۰۴-۱۰ ۰۸:۴۵:۰۰ ۲۰۲۳-۰۴-۱۰ ۱۸:۰۱:۰۰ +۰۰ ۰۹:۱۶:۰۰٫۰۰۰۰۰۰
۲ ۲۰۲۳-۰۴-۱۱ ۰۹:۰۰:۰۰ ۲۰۲۳-۰۴-۱۱ ۱۷:۰۰:۰۰ +۰۰ ۰۸:۰۰:۰۰٫۰۰۰۰۰۰
۳ ۲۰۲۳-۰۴-۱۲ ۰۸:۰۰:۰۰ ۲۰۲۳-۰۴-۱۲ ۱۷:۴۵:۰۰ +۰۰ ۰۹:۴۵:۰۰٫۰۰۰۰۰۰
۴ ۲۰۲۳-۰۴-۱۳ ۰۷:۰۰:۰۰ ۲۰۲۳-۰۴-۱۳ ۱۶:۰۰:۰۰ +۰۰ ۰۹:۰۰:۰۰٫۰۰۰۰۰۰
در نگارش های گذشته با خطا مواجه می شویم.
select sum(duration) from t1;
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL DAY TO SECOND
SQL>
select avg(duration) from t1
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL DAY TO SECOND
SQL>
در نگارش ۲۳c همانطور که مشاهده می کنید این عملیات بدون خطا اجرا می شود.
select sum(duration) from t1;
SUM(DURATION)
—————————————————————————
+۰۰۰۰۰۰۰۰۱ ۱۲:۰۱:۰۰٫۰۰۰۰۰۰۰۰۰
SQL>
select avg(duration) from t1;
AVG(DURATION)
—————————————————————————
+۰۰۰۰۰۰۰۰۰ ۰۹:۰۰:۱۵٫۰۰۰۰۰۰۰۰۰
SQL>
می توان این توابع را به صورت تحلیلی نیز استفاده کرد:
set linesize 120
column sum_duration format a30
select id,
start_time,
end_time,
duration,
sum(duration) over () as sum_duration
from t1;
ID START_TIME END_TIME DURATION SUM_DURATION
———- ——————– ——————– ——————– ——————————
۱ ۲۰۲۳-۰۴-۱۰ ۰۸:۴۵:۰۰ ۲۰۲۳-۰۴-۱۰ ۱۸:۰۱:۰۰ +۰۰ ۰۹:۱۶:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۱ ۱۲:۰۱:۰۰٫۰۰۰۰۰۰۰۰۰
۲ ۲۰۲۳-۰۴-۱۱ ۰۹:۰۰:۰۰ ۲۰۲۳-۰۴-۱۱ ۱۷:۰۰:۰۰ +۰۰ ۰۸:۰۰:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۱ ۱۲:۰۱:۰۰٫۰۰۰۰۰۰۰۰۰
۳ ۲۰۲۳-۰۴-۱۲ ۰۸:۰۰:۰۰ ۲۰۲۳-۰۴-۱۲ ۱۷:۴۵:۰۰ +۰۰ ۰۹:۴۵:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۱ ۱۲:۰۱:۰۰٫۰۰۰۰۰۰۰۰۰
۴ ۲۰۲۳-۰۴-۱۳ ۰۷:۰۰:۰۰ ۲۰۲۳-۰۴-۱۳ ۱۶:۰۰:۰۰ +۰۰ ۰۹:۰۰:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۱ ۱۲:۰۱:۰۰٫۰۰۰۰۰۰۰۰۰
SQL>
column avg_duration format a30
select id,
start_time,
end_time,
duration,
avg(duration) over () as avg_duration
from t1;
ID START_TIME END_TIME DURATION AVG_DURATION
———- ——————– ——————– ——————– ——————————
۱ ۲۰۲۳-۰۴-۱۰ ۰۸:۴۵:۰۰ ۲۰۲۳-۰۴-۱۰ ۱۸:۰۱:۰۰ +۰۰ ۰۹:۱۶:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۰ ۰۹:۰۰:۱۵٫۰۰۰۰۰۰۰۰۰
۲ ۲۰۲۳-۰۴-۱۱ ۰۹:۰۰:۰۰ ۲۰۲۳-۰۴-۱۱ ۱۷:۰۰:۰۰ +۰۰ ۰۸:۰۰:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۰ ۰۹:۰۰:۱۵٫۰۰۰۰۰۰۰۰۰
۳ ۲۰۲۳-۰۴-۱۲ ۰۸:۰۰:۰۰ ۲۰۲۳-۰۴-۱۲ ۱۷:۴۵:۰۰ +۰۰ ۰۹:۴۵:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۰ ۰۹:۰۰:۱۵٫۰۰۰۰۰۰۰۰۰
۴ ۲۰۲۳-۰۴-۱۳ ۰۷:۰۰:۰۰ ۲۰۲۳-۰۴-۱۳ ۱۶:۰۰:۰۰ +۰۰ ۰۹:۰۰:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۰ ۰۹:۰۰:۱۵٫۰۰۰۰۰۰۰۰۰
SQL>
جهت مشاوره، آموزش خدمات نگهداری و پشتیبانی پایگاه داده اوراکل با ما در ارتباط باشید