از نسخه های قدیمی اوراکل امکان استفاده از عبارت 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