Artarad_oracle_23c

معرفی قابلیت 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;

 

مرجع مستند

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

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

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