اوراکل 23ai- قابلیت Table Values Constructor

Table Values Constructor قابلیتی است که در بیشتر دیتابیسهای رابطه ای وجود داشته و اوراکل امکان استفاده از این قابلیت را در نسخه 23c فراهم کرده است.

بر اساس این قابلیت، می توانیم با اجرای یک دستور insert ساده(Insert به همراه عبارت Values) چندین رکورد را در یک جدول درج کنیم البته استفاده از کلمه کلیدی Values به دستور insert محدود نمی شود و از این عبارت می توانیم برای دستورات DMLای دیگر نظیر Select و Merge هم استفاده کنیم.

ابتدا مثالی از نحوه استفاده از این قابلیت را به همراه دستور insert مشاهده می کنید.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL*Plus: Release 23.0.0.0.0 - Developer-Release on Tue Aug 29 22:41:17 2023
SQL> insert into Irani values(1,'Vahid'),(2,'Usef');
2 rows created.
SQL> commit;
Commit complete.
SQL*Plus: Release 23.0.0.0.0 - Developer-Release on Tue Aug 29 22:41:17 2023 SQL> insert into Irani values(1,'Vahid'),(2,'Usef'); 2 rows created. SQL> commit; Commit complete.
SQL*Plus: Release 23.0.0.0.0 - Developer-Release on Tue Aug 29 22:41:17 2023
SQL> insert into Irani values(1,'Vahid'),(2,'Usef');
2 rows created.
SQL> commit;
Commit complete.

با اجرای دستور فوق دو رکورد در جدول Irani ثبت شده اند:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> select * from Irani;
ID NAME
---------- --------------
1 Vahid
2 Usef
SQL> select * from Irani; ID NAME ---------- -------------- 1 Vahid 2 Usef
SQL> select * from Irani;
        ID NAME
---------- --------------
         1 Vahid
         2 Usef 

این کار در نسخه های قبلی اوراکل امکان پذیر نبود:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL*Plus: Release 21.0.0.0.0 - Production on Tue Aug 29 21:47:30 2023
SQL> create table Irani(id number,name varchar2(14));
Table created.
SQL> insert into Irani values(1,'Vahid'),(2,'Usef');
'ORA-00933: SQL command not properly ended'
SQL*Plus: Release 21.0.0.0.0 - Production on Tue Aug 29 21:47:30 2023 SQL> create table Irani(id number,name varchar2(14)); Table created. SQL> insert into Irani values(1,'Vahid'),(2,'Usef'); 'ORA-00933: SQL command not properly ended'
SQL*Plus: Release 21.0.0.0.0 - Production on Tue Aug 29 21:47:30 2023
SQL> create table Irani(id number,name varchar2(14));
Table created.
SQL> insert into Irani values(1,'Vahid'),(2,'Usef');
'ORA-00933: SQL command not properly ended'

و برای انجام این کار در نسخه 21c می بایست دو بار دستور insert را اجرا کنیم:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL*Plus: Release 21.0.0.0.0 - Production on Tue Aug 29 21:47:30 2023
ID NAME
---------- -----
1 Vahid
2 Usef
SQL> insert into Irani values(1,'Vahid');
1 row created.
SQL> insert into Irani values(2,'Usef');
1 row created.
SQL*Plus: Release 21.0.0.0.0 - Production on Tue Aug 29 21:47:30 2023 ID NAME ---------- ----- 1 Vahid 2 Usef SQL> insert into Irani values(1,'Vahid'); 1 row created. SQL> insert into Irani values(2,'Usef'); 1 row created.
SQL*Plus: Release 21.0.0.0.0 - Production on Tue Aug 29 21:47:30 2023
        ID NAME
---------- -----
         1 Vahid
         2 Usef
SQL> insert into Irani values(1,'Vahid');
1 row created.
SQL> insert into Irani values(2,'Usef');
1 row created.

البته امکان اجرای دستورات فوق با استفاده از union all هم امکان پذیر است(در نسخه 21c):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> insert into Irani
select 1 as id,'Vahid' as name from dual
union all
select 2 as id, 'Usef' as name from dual;
2 rows created.
SQL> insert into Irani select 1 as id,'Vahid' as name from dual union all select 2 as id, 'Usef' as name from dual; 2 rows created.
SQL> insert into Irani
    select 1 as id,'Vahid' as name from dual
    union all
    select 2 as id, 'Usef' as name from dual;
2 rows created.

برای دستور select هم می توانیم به شکل زیر از قابلیت TVC استفاده کنیم:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> select * from (values(1,'Vahid'),(2,'Usef'))tbl1(id,name);
ID NAME
---------- -----
1 Vahid
2 Usef
SQL> select * from (values(1,'Vahid'),(2,'Usef'))tbl1(id,name); ID NAME ---------- ----- 1 Vahid 2 Usef
SQL> select * from (values(1,'Vahid'),(2,'Usef'))tbl1(id,name);
        ID NAME
---------- -----
         1 Vahid
         2 Usef

این دستور در زمان ساخت جدول شاید کاربردی باشد:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> create table Irani as select * from (values(1,'Vahid'),(2,'Usef'))tbl1(id,name);
Table created.
SQL> select * from Irani;
ID NAME
---------- -----
1 Vahid
2 Usef
SQL> desc Irani
Name Null? Type
------ -------- -----------
ID NUMBER
NAME VARCHAR2(5)
SQL> create table Irani as select * from (values(1,'Vahid'),(2,'Usef'))tbl1(id,name); Table created. SQL> select * from Irani; ID NAME ---------- ----- 1 Vahid 2 Usef SQL> desc Irani Name Null? Type ------ -------- ----------- ID NUMBER NAME VARCHAR2(5)
SQL> create table Irani as select * from (values(1,'Vahid'),(2,'Usef'))tbl1(id,name);
Table created.
SQL> select * from Irani;
        ID NAME
---------- -----
         1 Vahid
         2 Usef
SQL> desc Irani
Name   Null?    Type        
 ------ -------- ----------- 
 ID              NUMBER      
 NAME            VARCHAR2(5) 

البته در دستور فوق می توانیم تنظیمات دیگری را هم اعمال کنیم برای مثال می توانیم حداکثر طول نوع داده VARCHAR2 و NUMBER را افزایش دهیم:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> create table Irani as select * from (values(1,'Vahid'),(2,cast('USEF' as VARCHAR2(14))))tbl1(id,name);
Table created.
SQL> desc Irani
Name Null? Type
------ -------- ---------------
ID NUMBER
NAME VARCHAR2(14)
SQL> create table Irani as select * from (values(1,'Vahid'),(2,cast('USEF' as VARCHAR2(14))))tbl1(id,name); Table created. SQL> desc Irani Name Null? Type ------ -------- --------------- ID NUMBER NAME VARCHAR2(14)
SQL> create table Irani as select * from (values(1,'Vahid'),(2,cast('USEF' as VARCHAR2(14))))tbl1(id,name);
Table created.
SQL> desc Irani
 Name   Null?    Type
 ------ 	-------- 	--------------- 
 ID              	NUMBER
 NAME                VARCHAR2(14)

این قابلیت همراه با with clause هم قابل استفاده است:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> with Irani (ID,NAME) as (
values (1, 'Vahid'), (2, 'Usef'))
select * from Irani;
ID NAME
---------- -----
1 Vahid
2 Usef
SQL> with Irani (ID,NAME) as ( values (1, 'Vahid'), (2, 'Usef')) select * from Irani; ID NAME ---------- ----- 1 Vahid 2 Usef
SQL> with Irani (ID,NAME) as (
  values (1, 'Vahid'), (2, 'Usef'))
select * from Irani;
        ID NAME
---------- -----
         1 Vahid
         2 Usef

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

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

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