اوراکل 23ai – اجرای دستور SELECT بدون عبارت FROM

قبلا در مطلبی  نکاتی را در مورد “جدول dual و فراخوانی توابع در اوراکل و پستگرس” ارائه کردیم و توضیح دادیم که در دیتابیس پستگرس، در زمان فراخوانی توابع و عبارتها به همراه دستور select الزامی به استفاده از کلمه کلیدی FROM نخواهد بود. در صورتی که در دیتابیس اوراکل به ناچار باید از عبارت FROM در دستور SELECT استفاده کرد همچنین ثابت کردیم که به لحاظ پرفورمنسی استفاده از جدول dual در این مواقع بسیار کاربردی است.

حالا در نسخه 23c اوراکل امکان اجرای دستور SELECT را بدون عبارت FROM فراهم کرده است:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL*Plus: Release 21.0.0.0.0 - Production on Thu Jun 15 13:56:58 2023
SQL> select sysdate;
ORA-00923: FROM keyword not found where expected
SQL*Plus: Release 21.0.0.0.0 - Production on Thu Jun 15 13:56:58 2023 SQL> select sysdate; ORA-00923: FROM keyword not found where expected
SQL*Plus: Release 21.0.0.0.0 - Production on Thu Jun 15 13:56:58 2023
SQL> select sysdate;
ORA-00923: FROM keyword not found where expected
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release
SQL> SELECT sysdate;
SYSDATE
---------
15-JUN-23
SQL> select 15+85*98;
15+85*98
----------
8345
Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release SQL> SELECT sysdate; SYSDATE --------- 15-JUN-23 SQL> select 15+85*98; 15+85*98 ---------- 8345
Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release
SQL> SELECT sysdate;
SYSDATE
---------
15-JUN-23
SQL> select 15+85*98;
  15+85*98
----------
      8345

در plsql هم این امکان وجود دارد:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> create or replace function func1
return date
as
d date;
begin
select sysdate into d;
return d;
end;
/
Function created.
SQL> create or replace function func1 return date as d date; begin select sysdate into d; return d; end; / Function created.
SQL> create or replace function func1
return date
as
d date;
begin
  select sysdate into d;
  return d;
end;
/
Function created.
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> select func1;
FUNC1
---------
15-JUN-23
SQL> select func1; FUNC1 --------- 15-JUN-23
SQL> select func1;
FUNC1
---------
15-JUN-23

نکته ای که شاید جالب بنظر برسد، استفاده اوراکل از dual در پس زمینه است این مسئله با فعال کردن trace قابل اثبات است:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> select 1402*1403;
1402*1403
----------
1967006
SQL> select 1402*1403; 1402*1403 ---------- 1967006
SQL> select 1402*1403;
 1402*1403
----------
   1967006

قسمتی از trace مربوط به این کوئری را می بینید:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Final query after transformations:******* UNPARSED QUERY IS *******
SELECT 1967006 "1402*1403" FROM "SYS"."DUAL" "DUAL"
Final query after transformations:******* UNPARSED QUERY IS ******* SELECT 1967006 "1402*1403" FROM "SYS"."DUAL" "DUAL"
Final query after transformations:******* UNPARSED QUERY IS *******
SELECT 1967006 "1402*1403" FROM "SYS"."DUAL" "DUAL"

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

Comment (1)

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

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