Table values constructor به ما اجازه می دهد چندین ردیف را با استفاده از دستور برای استفاده در دستورات SQL تعریف کنیم. این قابلیت Table Values Constructor در Oracle Database 23c معرفی شده است.
برای نصب و راه اندازی پایگاه داده Oracle 23c از این مستند استفاده کنید.
برای اینکار در ابتدا یک جدول ایجاد می کنیم سپس دستورات مربوطه را اجرا می کنیم.
drop table if exists t1;
create table t1 (
id number,
code varchar2(6),
description varchar(25),
constraint t1_pk primary key (id)
);
دستور INSERT:
سازنده مقادیر جدول به ما این امکان را می دهد که در یک مرحله چند ردیف را در یک جدول وارد کنیم.
insert into t1
values (1, ‘ONE’, ‘Description for ONE’),
(۲, ‘TWO’, ‘Description for TWO’),
(۳, ‘THREE’, ‘Description for THREE’);
commit;
select * from t1;
ID CODE DESCRIPTION
———- —— ————————-
۱ ONE Description for ONE
۲ TWO Description for TWO
۳ THREE Description for THREE
SQL>
دستور SELECT:
از همان نوع Table values constructor می توان در عبارت FROM یک دستور SELECT استفاده کرد. توجه داشته باشید که باید نام ستون ها را مستعار کنیم تا به درستی ارائه شوند.
select *
from (values
(۴, ‘FOUR’, ‘Description for FOUR’),
(۵, ‘FIVE’, ‘Description for FIVE’),
(۶, ‘SIX’, ‘Description for SIX’)
) a (id, code, description);
ID CODE DESCRIPTION
———- —- ——————–
۴ FOUR Description for FOUR
۵ FIVE Description for FIVE
۶ SIX Description for SIX
SQL>
دستور WITH Clause:
Table values constructor را می توان به عنوان بخشی از یک عبارت WITH استفاده کرد.
with a (id, code, description) AS (
values (7, ‘SEVEN’, ‘Description for SEVEN’),
(۸, ‘EIGHT’, ‘Description for EIGHT’),
(۹, ‘NINE’, ‘Description for NINE’)
)
select * from a;
ID CODE DESCRIPTION
———- —– ———————
۷ SEVEN Description for SEVEN
۸ EIGHT Description for EIGHT
۹ NINE Description for NINE
SQL>
دستور MERGE:
Table values constructor می تواند به عنوان داده منبع برای دستور MERGE استفاده شود.
merge into t1 a
using (values
(۴, ‘FOUR’, ‘Description for FOUR’),
(۵, ‘FIVE’, ‘Description for FIVE’),
(۶, ‘SIX’, ‘Description for SIX’)
) b (id, code, description)
on (a.id = b.id)
when matched then
update set a.code = b.code,
a.description = b.description
when not matched then
insert (a.id, a.code, a.description)
values (b.id, b.code, b.description);
۳ rows merged.
SQL>
select * from t1;
ID CODE DESCRIPTION
———- —— ————————-
۱ ONE Description for ONE
۲ TWO Description for TWO
۳ THREE Description for THREE
۴ FOUR Description for FOUR
۵ FIVE Description for FIVE
۶ SIX Description for SIX
۶ rows selected.
SQL>
rollback;