اوراکل 23c – قابلیت Table Values Constructor

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

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

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

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 ثبت شده اند:

SQL> select * from Irani;
        ID NAME
---------- --------------
         1 Vahid
         2 Usef 

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

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 را اجرا کنیم:

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):

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 استفاده کنیم:

SQL> select * from (values(1,'Vahid'),(2,'Usef'))tbl1(id,name);
        ID NAME
---------- -----
         1 Vahid
         2 Usef

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

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 را افزایش دهیم:

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 هم قابل استفاده است:

SQL> with Irani (ID,NAME) as (
  values (1, 'Vahid'), (2, 'Usef'))
select * from Irani;
        ID NAME
---------- -----
         1 Vahid
         2 Usef

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

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

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