Artarad_Oracle_23c

بررسی امکان استفاده از توابع جمع و میانگین (توابع تجمیعی) بر نوع داده ای مدت زمان در پایگاه داده اوراکل ۲۳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 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>

منبع مستند

جهت مشاوره، آموزش خدمات نگهداری و پشتیبانی پایگاه داده اوراکل با ما در ارتباط باشید

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *