اوراکل 23c – بهبودهایی در زمینه DML RETURNING INTO

از نسخه های قدیمی اوراکل امکان استفاده از عبارت RETURNING INTO به همراه دستورات DMLای وجود داشت که در قسمت زیر نحوه استفاده از آن را می بینید:

SQL*Plus: Release 10.1.0.4.2 - Production on Tue Aug 15 14:08:30 2023
SQL> select * from tbl1;
        ID NAME
---------- ----------
         1 Vahid
         2 Usef
SQL>declare
    var_id number;
    var_name varchar2(10);
  begin
  --Update
    update tbl1 set name='ALI' where id=2 returning name into var_name;
   	dbms_output.put_line('After_Update==>' || name='||var_name);
  --Delete
    delete tbl1 where id=1 returning name into var_name;
    dbms_output.put_line('Before_Delete==>' || name='||var_name);
  --Insert	
    insert into tbl1 values(3,'Reza') returning id,name into var_id,var_name;
    	 dbms_output.put_line('INSERT==> id='||var_id||' , name='||var_name);
    commit;
  end;
/        
After_Update==>name=ALI
Before_Delete==> name=Vahid
INSERT==> id=3 , name=Reza
SQL> select * from tbl1;
        ID NAME
---------- ----------
         2 ALI
         3 Reza

در اوراکل 23c بهبودی در این زمینه ایجاد شد اوراکل دو عبارت OLD  و  NEW را هم در این زمینه اضافه کرده است برای دستور Update می توان از هر دو عبارت OLD  و  NEW استفاده کرد همچنین عبارت NEW برای دستور Insert و عبارت OLD برای دستور Delete قابل استفاده هستند.

syntax کلی عبارت RETURNING INTO در اوراکل 10g و 23c را در قسمت زیر مشاهده می کنید:

Oracle 10g:
RETURNING <exprs> INTO <data_items>;

Oracle 23c:
( RETURN | RETURNING) ( OLD | NEW )  expr [ , ( OLD | NEW ) expr ]+ INTO  [data_item] ...

مثال زیر را ببنید:

SQL> select * from tbl1;
        ID NAME
---------- ----------
         1 Vahid
         2 Usef
DECLARE
 OLD_Name varchar2(1000);
 NEW_Name varchar2(1000);
 New_Val_id number(10);

BEGIN
--'update'
  update tbl1
     set name = 'ALI'
   where id = 2
  RETURNING OLD name, NEW name INTO OLD_Name, NEW_Name;
  DBMS_OUTPUT.PUT_LINE('Update_OLD_Value-name = ' || OLD_Name);
  DBMS_OUTPUT.PUT_LINE('Update_NEW_Value-name = ' || NEW_Name);
  DBMS_OUTPUT.PUT_LINE('-------------------------------');
  --'Delete'
    delete tbl1 where id=1 returning OLD name into OLD_Name;
  dbms_output.put_line('Before_Delete==> name='||OLD_Name);
    DBMS_OUTPUT.PUT_LINE('-------------------------------');
  --'Insert'  
    insert into tbl1 values(3,'Reza')  RETURNING NEW id, NEW name into New_Val_id, NEW_Name;
       dbms_output.put_line('INSERT_New_Value==> id='|| New_Val_id ||' , name='|| NEW_Name);

END;
/
Update_OLD_Value-name = Usef
Update_NEW_Value-name = ALI
-------------------------------
Before_Delete==> name=Vahid
-------------------------------
INSERT_New_Value==> id=3 , name=Reza

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

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

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