استفاده از Column Alias در قسمت Group by  و Having در اوراکل 23c

در نسخه 23c می توان از Column Alias در قسمت GROUP BY و HAVING استفاده کرد. این امکان تا قبل از نسخه 23c وجود نداشت:

Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
SQL> select lower(owner) as Malek, sum(bytes / 1024 / 1024) as SIZE_MB
  2    from dba_segments
  3   group by Malek
  4  having SIZE_MB>100;
ERROR at line 4:
ORA-00904: "SIZE_MB": invalid identifier

در نسخه 21c برای جلوگیری از خطای invalid identifier فوق، می بایست Alias ستون را حذف و کوئری را به صورت زیر بازنویسی کرد:

select lower(owner) as Malek, sum(bytes / 1024 / 1024) as SIZE_MB
  from dba_segments
 group by owner
having sum(bytes / 1024 / 1024) > 10;

در نسخه 23c هر دو پرس و جوی فوق قابل اجرا هستند و می توانیم از “SIZE_MB” به جای …sum استفاده کنیم:

Connected to Oracle Database 23c Free, Release 23.0.0.0.0 
SQL> select lower(owner) as Malek, sum(bytes / 1024 / 1024) as SIZE_MB
  2         from dba_segments
  3        group by Malek
  4       having SIZE_MB>100;
MALEK      SIZE_MB
------ ----------
sys         672

در نسخه 23c، قابلیت دیگری هم در این زمینه ایجاد شد که آن هم استفاده از شماره ستون در قسمت GROUP BY است برای استفاده از این قابلیت، باید پارامتر group_by_position_enabled را به مقدار TRUE تنظیم کنیم:

SQL> select lower(owner) as Malek, sum(bytes / 1024 / 1024) as SIZE_MB
  from dba_segments
 group by 1
having SIZE_MB > 100; 
ERROR at line 1:
ORA-00979: "OWNER": must appear in the GROUP BY clause or be used in an aggregate function
SQL> alter session set group_by_position_enabled=true;
Session altered.
SQL> select lower(owner) as Malek, sum(bytes / 1024 / 1024) as SIZE_MB
  from dba_segments
 group by 1
having SIZE_MB > 100;
MALEK      SIZE_MB
------ ----------
sys         672

 

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

Comment (1)

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

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