بررسی امکان استفاده از توابع جمع و میانگین (توابع تجمیعی) بر نوع داده ای مدت زمان در پایگاه داده اوراکل ۲۳C

در پایگاه داده اوراکل ۲۳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 SECONDSQL>select avg(duration) from t1*ERROR at line 1:ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL DAY TO SECONDSQL>در نگارش ۲۳c همانطور که مشاهده می کنید این عملیات بدون خطا اجرا می شود.select sum(duration) from t1;SUM(DURATION)—————————————————————————+۰۰۰۰۰۰۰۰۱ ۱۲:۰۱:۰۰٫۰۰۰۰۰۰۰۰۰SQL>select avg(duration) from t1;AVG(DURATION)—————————————————————————+۰۰۰۰۰۰۰۰۰ ۰۹:۰۰:۱۵٫۰۰۰۰۰۰۰۰۰SQL>می توان این توابع را به صورت تحلیلی نیز استفاده کرد:set linesize 120column sum_duration format a30select id,start_time,end_time,duration,sum(duration) over () as sum_durationfrom t1;ID START_TIME END_TIME DURATION SUM_DURATION———- ——————– ——————– ——————– ——————————۱ ۲۰۲۳-۰۴-۱۰ ۰۸:۴۵:۰۰ ۲۰۲۳-۰۴-۱۰ ۱۸:۰۱:۰۰ +۰۰ ۰۹:۱۶:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۱ ۱۲:۰۱:۰۰٫۰۰۰۰۰۰۰۰۰۲ ۲۰۲۳-۰۴-۱۱ ۰۹:۰۰:۰۰ ۲۰۲۳-۰۴-۱۱ ۱۷:۰۰:۰۰ +۰۰ ۰۸:۰۰:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۱ ۱۲:۰۱:۰۰٫۰۰۰۰۰۰۰۰۰۳ ۲۰۲۳-۰۴-۱۲ ۰۸:۰۰:۰۰ ۲۰۲۳-۰۴-۱۲ ۱۷:۴۵:۰۰ +۰۰ ۰۹:۴۵:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۱ ۱۲:۰۱:۰۰٫۰۰۰۰۰۰۰۰۰۴ ۲۰۲۳-۰۴-۱۳ ۰۷:۰۰:۰۰ ۲۰۲۳-۰۴-۱۳ ۱۶:۰۰:۰۰ +۰۰ ۰۹:۰۰:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۱ ۱۲:۰۱:۰۰٫۰۰۰۰۰۰۰۰۰SQL>column avg_duration format a30select id,start_time,end_time,duration,avg(duration) over () as avg_durationfrom t1;ID START_TIME END_TIME DURATION AVG_DURATION———- ——————– ——————– ——————– ——————————۱ ۲۰۲۳-۰۴-۱۰ ۰۸:۴۵:۰۰ ۲۰۲۳-۰۴-۱۰ ۱۸:۰۱:۰۰ +۰۰ ۰۹:۱۶:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۰ ۰۹:۰۰:۱۵٫۰۰۰۰۰۰۰۰۰۲ ۲۰۲۳-۰۴-۱۱ ۰۹:۰۰:۰۰ ۲۰۲۳-۰۴-۱۱ ۱۷:۰۰:۰۰ +۰۰ ۰۸:۰۰:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۰ ۰۹:۰۰:۱۵٫۰۰۰۰۰۰۰۰۰۳ ۲۰۲۳-۰۴-۱۲ ۰۸:۰۰:۰۰ ۲۰۲۳-۰۴-۱۲ ۱۷:۴۵:۰۰ +۰۰ ۰۹:۴۵:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۰ ۰۹:۰۰:۱۵٫۰۰۰۰۰۰۰۰۰۴ ۲۰۲۳-۰۴-۱۳ ۰۷:۰۰:۰۰ ۲۰۲۳-۰۴-۱۳ ۱۶:۰۰:۰۰ +۰۰ ۰۹:۰۰:۰۰٫۰۰۰۰۰۰ +۰۰۰۰۰۰۰۰۰ ۰۹:۰۰:۱۵٫۰۰۰۰۰۰۰۰۰SQL>منبع مستندجهت مشاوره، آموزش خدمات نگهداری و پشتیبانی پایگاه داده اوراکل با ما در ارتباط باشید