از نسخه های قدیمی اوراکل امکان استفاده از عبارت 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 retuing name into var_name; dbms_output.put_line('After_Update==>' || name='||var_name); --Delete delete tbl1 where id=1 retuing name into var_name; dbms_output.put_line('Before_Delete==>' || name='||var_name); --Insert insert into tbl1 values(3,'Reza') retuing 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 retuing 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
ایمیل:[email protected]
تالار های تخصصی...
ما را در سایت تالار های تخصصی دنبال میکنید
برچسب: نویسنده: خنجی بازدید: 56 تاريخ: يکشنبه 12 آذر 1402 ساعت: 6:28