یکی از قابلیت هایی که در پایگاه داده Oracle 23c معرفی شده است Direct Join در دستورات Delete و Update می باشد که در مقاله به بررسی این قابلیت می پردازیم.
مقاله آموزش نصب و راه اندازی پایگاه داده Oracle 23c
جداول مورد نیاز را با دستورات زیر ایجاد می کنیم:
create table t1 as
select level as id,
‘CODE’ || level as code,
‘Description for ‘ || level as description
from dual
connect by level <= 100;
alter table t1 add constraint t1_pk primary key (id);
create table t2 as
select level as id,
‘CODE’ || (level*10) as code,
‘Updated description for ‘ || (level*10) as description
from dual
connect by level <= 100;
alter table t2 add constraint t2_pk primary key (id);
create table t3 as
select level as id,
‘CODE’ || (level*10) as code,
‘Updated description for ‘ || (level*10) as description
from dual
connect by level <= 100;
alter table t3 add constraint t3_pk primary key (id);
در ابتدا ۵ سطر از داده های موجود در جدول t1 را مشاهده کنیم :
select * from t1 where id <= 5;
ID CODE DESCRIPTION
———- ———- ——————————
۱ CODE1 Description for 1
۲ CODE2 Description for 2
۳ CODE3 Description for 3
۴ CODE4 Description for 4
۵ CODE5 Description for 5
SQL>
حال با دستور زیر با استفاده از Direct Join جدول را Update می کنیم.
update t1 a
set a.code = b.code,
a.description = b.description
from t2 b
where a.id = b.id
and b.id <= 5;
دوباره داده های مربوطه را مشاهده می کنیم:
select * from t1 where id <= 5;
ID CODE DESCRIPTION
———- ———- ——————————
۱ CODE10 Updated description for 10
۲ CODE20 Updated description for 20
۳ CODE30 Updated description for 30
۴ CODE40 Updated description for 40
۵ CODE50 Updated description for 50
SQL>
حال برای ادامه تست ها، تغییرات را Rollback می کنیم.
rollback;
ما نمیتوانیم از Join ANSI بین T1 و T2 استفاده کنیم، اما اگر چندین جدول وجود داشت که Update بر اساس آنها انجام می شود، میتوان آنها را با استفاده از اتصالات ANSI به یکدیگر Join کرد. به مثال زیر توجه کنید.
update t1 a
set a.code = b.code,
a.description = b.description
from t2 b
join t3 c on b.id = c.id
where a.id = b.id
and b.id <= 5;
rollback;
جهت دریافت خدمات مشاوره، آموزش و نگهداری پایگاه داده اوراکل با ما در ارتباط باشد
داده های جدول T1 را با استفاده از جدول T2 حذف می کنیم:
delete t1 a
from t2 b
where a.id = b.id
and b.id <= 5;
همانطور که مشاهده می کنید داده حذف شده اند :
select * from t1 where id <= 5;
no rows selected
SQL>
مجدد برای ادامه تست ها، تغییرات را Rollback می کنیم.
Rollback;
ما نمیتوانیم از Join ANSI بین T1 و T2 استفاده کنیم، اما اگر چندین جدول وجود داشت که Deleteبر اساس آنها انجام می شود، میتوان آنها را با استفاده از اتصالات ANSI به یکدیگر Join کرد. به مثال زیر توجه کنید.
delete t1 a
from t2 b
join t3 c on b.id = c.id
where a.id = b.id
and b.id <= 5;
rollback;