مسعود سلطانی راد
مسعود سلطانی راد
خواندن ۳ دقیقه·۱ سال پیش

معرفی قابلیت Direct Join برای دستورات Update و Delete در Oracle 23c


یکی از قابلیت هایی که در پایگاه داده 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);

استفاده از Direct Join در دستور Update

در ابتدا ۵ سطر از داده های موجود در جدول 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;

ارتباط با ما

جهت دریافت خدمات مشاوره، آموزش و نگهداری پایگاه داده اوراکل با ما در ارتباط باشد

استفاده از Direct Join در دستور Delete

داده های جدول 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;

باما در تماس باشید

مرجع مستند

oracle databaseoracle 23cمشاوره اوراکلخدمات اوراکلمسعود سلطانی راد
چند سالی هست در حوزه داده ها ( نگهداری و تحلیل آنها) فعالیت دارم و همیشه سعی کردم آموخته هایم رو به اشتراک بگذارم soltanirad@artarad.ir www.artarad.ir
شاید از این پست‌ها خوشتان بیاید