با عرض سلام و خسته نباشید خدمت کاربران محترم سایت آموزشی پی وی لرن. و کاربرانی که آموزش کامل PL/SQL را دنبال می کنند. در این پست آموزشی ما در مورد triggers در PL / SQL ( راه اندازی در PL / SQL ) صحبت خواهیم کرد. برنامه های ذخیره شده در triggers در PL / SQL می شود ،که به طور خودکار اجرا می شوند و یا اخراج در زمانی که برخی از وقایع رخ می دهد. در واقع عملگرها در واکنش به هر یک از رویدادهای زیر نوشته شده اند.
( triggers در PL / SQL ) راه اندازی در PL / SQL می تواند بر روی جدول، نمایش، طرح، یا پایگاه داده که به رویداد مرتبط است تعریف شده است.
راه اندازی در PL / SQL می تواند برای اهداف زیر نوشته شود:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | CREATE [OR REPLACE ] TRIGGER trigger_name {BEFORE | AFTER | INSTEAD OF } {INSERT [OR] | UPDATE [OR] | DELETE} [OF col_name] ON table_name [REFERENCING OLD AS o NEW AS n] [FOR EACH ROW] WHEN (condition) DECLARE Declaration-statements BEGIN Executable-statements EXCEPTION Exception-handling-statements END; |
این بند فقط برای محرک های سطر سطح معتبر است.
برای شروع از جدول مشتری که ما در جلسه های قبلی ایجاد کرده ایم استفاده می کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 | Select * from customers; +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | +----+----------+-----+-----------+----------+ |
برنامه زیر یک ماژول ردیف سطح برای جدول مشتری ایجاد می کند که می تواند عملیات INSERT یا UPDATE یا DELETE انجام شده در جدول CUSTOMERS باشد.
این راه اندازی در PL / SQL تفاوت های حقوق و دستمزد بین ارزش های قدیمی و ارزش های جدید را نشان می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 | CREATE OR REPLACE TRIGGER display_salary_changes BEFORE DELETE OR INSERT OR UPDATE ON customers FOR EACH ROW WHEN (NEW.ID > 0) DECLARE sal_diff number; BEGIN sal_diff := :NEW.salary - :OLD.salary; dbms_output.put_line('Old salary: ' || :OLD.salary); dbms_output.put_line('New salary: ' || :NEW.salary); dbms_output.put_line('Salary difference: ' || sal_diff); END; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 | Trigger created. |
نکات زیر باید در اینجا مورد توجه قرار گیرد.
چرا که باعث می شود جدول را پرس و جو یا دوباره آن را تغییر دهید تنها پس از تغییرات اولیه اعمال می شود و جدول در حالت ثابت است.
اجازه دهید ما برخی از عملیات DML را در جدول CUSTOMERS انجام دهیم.
در اینجا یک بیانیه INSERT است که یک رکورد جدید در جدول ایجاد می کند.
1 2 | INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES (7, 'Kriti', 22, 'HP', 7500.00 ); |
وقتی یک رکورد در جدول CUSTOMERS ایجاد می شود، triggers ایجاد شده بالا، display_salary_changes را ایجاد خواهد کرد.
و نتیجه زیر را نمایش می دهد.
1 2 3 | Old salary: New salary: 7500 Salary difference: |
از آنجا که این یک رکورد جدید است، حقوق بازنشستگی قدیمی در دسترس نیست و نتیجه فوق به صورت غیرقانونی است.
اکنون یک عملیات DML دیگر را در جدول CUSTOMERS انجام می دهیم.
بیانیه UPDATE یک رکورد موجود در جدول را بروز می کند.
1 2 3 | UPDATE customers SET salary = salary + 500 WHERE id = 2; |
هنگامی که یک رکورد در جدول CUSTOMERS بروز می شود.
در بالا باعث ایجاد راه اندازی در PL / SQL نمایشگر_salary_changes اخراج خواهد شد و نتیجه زیر را نمایش می دهد.
1 2 3 | Old salary: 1500 New salary: 2000 Salary difference: 500 |
در این جلسه آموزشی ما برای شما راه اندازی در PL / SQL را در نظر گرفتیم در تعریف کلی از تریگر Trigger می توان گفت که تریگر یک ساختار بلاکی در PL/SQL است که با اجرای دستورات DML بر روی جداول پابگاه داده اجرا می شود.
امید واریم از خواندن آن لذت برده باشید.