پرشین تم مقالات آموزش کامل تریگرها، رویه های ذخیره شده و توابع در SQL

آموزش کامل تریگرها، رویه های ذخیره شده و توابع در SQL

image profile پرشین تم - 27 آذر 1403 - 14:14 دانلود مقاله

در این مقاله یک آموزش جامع از تریگرها، رویه های ذخیره شده و توابع در SQL همراه با ذکر جزئیات و مثال ارائه می دهیم. تریگرها به طور خودکار در پاسخ به رویدادهای خاص (مانند INSERT، UPDATE، DELETE) اجرا می‌شوند و تضمین می‌کنند که وظایف به طور مداوم و بدون دخالت دستی انجام می‌شوند.

آموزش کامل تریگرها، رویه های ذخیره شده و توابع در SQL

رویه های ذخیره شده منطق تجاری پیچیده را در بلوک‌های کد قابل استفاده مجدد گنجانده و افزونگی را کاهش می‌دهد و توابع بلوک‌های کد قابل استفاده مجدد را ایجاد کنید که وظایف خاصی را انجام می‌دهند و مقادیر را برمی‌گردانند و پرس و جوهای پیچیده را ساده می‌کنند.

 

1. تریگرها:

Triggerها رویه‌های ذخیره‌شده خاصی هستند که به‌طور خودکار زمانی که رویدادهای خاصی در پایگاه داده رخ می‌دهند، اجرا می‌شوند. آنها برای حفظ یکپارچگی داده ها و اجرای قوانین تجاری استفاده می شوند.

انواع محرک ها:

  • DML Triggers: در پاسخ به رویدادهای زبان دستکاری داده ها (DML) مانند INSERT، UPDATE، و DELETE اجرا می شود.
  • DDL Triggers: در پاسخ به رویدادهای زبان تعریف داده (DDL) مانند CREATE، ALTER و DROP اجرا می شود.
  • Logon Triggers: زمانی که کاربر وارد پایگاه داده می شود اجرا می شود.

 

مثال:

بیایید یک ماشه ساده DML ایجاد کنیم که حذف‌ها را از جدول کارکنان ثبت می‌کند.

CREATE TRIGGER log_deletion
AFTER DELETE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO deletion_log (employee_id, deleted_at)
    VALUES (OLD.employee_id, NOW());
END;

در این مثال، هرگاه ردیفی از جدول کارکنان حذف شود، ورودی مربوطه در جدول deletion_log ایجاد می شود.

 

تریگرهای پیشرفته:

تریگرها ابزارهای قدرتمندی برای خودکارسازی وظایف در پاسخ به تغییرات در پایگاه داده شما هستند.

تریگرهای پیچیده:

  • Multiple Actions Trigger: یک ماشه ایجاد می کند که چندین عمل را انجام دهد. به عنوان مثال، به روز رسانی جدول حسابرسی و ارسال هشدار.

مثال:

در اینجا یک راه‌انداز پیچیده‌تر وجود دارد که جدول حسابرسی را به‌روزرسانی می‌کند و هنگام به‌روزرسانی یک ردیف در جدول کارکنان، ایمیلی ارسال می‌کند:

CREATE TRIGGER audit_employee_update
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    -- Insert into audit table
    INSERT INTO employee_audit (employee_id, old_salary, new_salary, changed_at)
    VALUES (OLD.employee_id, OLD.salary, NEW.salary, NOW());
    -- Send an email (pseudo code for illustrative purposes)
    CALL send_email('admin@example.com', 'Employee Update', 
                    CONCAT('Employee ID ', OLD.employee_id, ' salary updated from ', 
                    OLD.salary, ' to ', NEW.salary));
END;

 

2. رویه های ذخیره شده:

رویه های ذخیره شده مجموعه ای از دستورات SQL هستند که می توانند در سرور پایگاه داده ذخیره و اجرا شوند. آنها به کاهش ترافیک شبکه و بهبود عملکرد کمک می کنند.

نحو:

CREATE PROCEDURE procedure_name
AS
BEGIN
    -- SQL statements
END;

مثال:

در اینجا یک رویه ذخیره شده ایجاد شده است که همه مشتریان را از یک شهر خاص انتخاب می کند:

CREATE PROCEDURE SelectCustomersByCity @City NVARCHAR(50)
AS
BEGIN
    SELECT * FROM Customers WHERE City = @City;
END;

برای اجرای رویه ذخیره شده:

EXEC SelectCustomersByCity @City = 'London';

 

رویه های ذخیره سازی پیشرفته:

رویه‌های ذخیره‌شده می‌توانند شامل زبان کنترل جریان، مانند دستورات شرطی (IF، CASE) و حلقه‌ها (WHILE، FOR) باشند.

مثال:

در اینجا یک رویه ذخیره شده است که پاداش را برای کارکنان بر اساس رتبه عملکرد آنها محاسبه می کند و حقوق آنها را به روز می کند:

CREATE PROCEDURE CalculateBonus
AS
BEGIN
    DECLARE @EmployeeID INT, @Rating INT, @Salary DECIMAL(10, 2), @Bonus DECIMAL(10, 2);   

    DECLARE employee_cursor CURSOR FOR
    SELECT employee_id, performance_rating, salary FROM employees;    

    OPEN employee_cursor;   

    FETCH NEXT FROM employee_cursor INTO @EmployeeID, @Rating, @Salary;   

    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @Bonus = CASE 
                        WHEN @Rating = 5 THEN @Salary * 0.10
                        WHEN @Rating = 4 THEN @Salary * 0.05
                        ELSE 0
                     END;
        UPDATE employees SET salary = salary + @Bonus WHERE employee_id = @EmployeeID;
        
        FETCH NEXT FROM employee_cursor INTO @EmployeeID, @Rating, @Salary;
    END;  

    CLOSE employee_cursor;
    DEALLOCATE employee_cursor;
END;

 

3. توابع:

از توابع برای انجام عملیات و برگرداندن یک مقدار استفاده می شود. آنها می توانند اسکالر (برگرداندن یک مقدار واحد) یا با ارزش جدول (برگرداندن یک جدول) باشند.

نحو:

CREATE FUNCTION function_name
RETURNS data_type
AS
BEGIN
    -- SQL statements
    RETURN value;
END;

مثال:

در اینجا یک تابع اسکالر وجود دارد که کل فروش را برای یک محصول مشخص محاسبه می کند:

CREATE FUNCTION GetTotalSales (@ProductID INT)
RETURNS DECIMAL(10, 2)
AS
BEGIN
    DECLARE @TotalSales DECIMAL(10, 2);
    SELECT @TotalSales = SUM(quantity * price) FROM Sales WHERE product_id = @ProductID;
    RETURN @TotalSales;
END;

برای فراخوانی تابع:

SELECT dbo.GetTotalSales(1);

 

توابع پیشرفته:

توابع را می توان نه تنها برای برگرداندن مقادیر منفرد بلکه برای برگرداندن جداول و انجام محاسبات پیچیده استفاده کرد.

مثال:

در اینجا یک تابع با ارزش جدول وجود دارد که همه کارکنانی را که به یک هدف فروش دست یافته اند برمی گرداند:

CREATE FUNCTION EmployeesMeetingSalesTarget (@Target INT)
RETURNS TABLE
AS
RETURN
(
    SELECT employee_id, name, total_sales
    FROM employees
    WHERE total_sales >= @Target
);

برای استفاده از این تابع:

SELECT * FROM EmployeesMeetingSalesTarget(100000);

 

ترکیب مفاهیم:

مثال:

بیایید تریگرها، رویه‌های ذخیره‌شده و توابع را در یک سناریو ترکیب کنیم. فرض کنید سیستمی داریم که در آن پاداش های کارکنان هر زمان که فروش انجام می شود محاسبه و ثبت می شود.

1. تابع محاسبه پاداش:

CREATE FUNCTION CalculateEmployeeBonus (@SalesAmount DECIMAL(10, 2))
RETURNS DECIMAL(10, 2)
AS
BEGIN
    DECLARE @Bonus DECIMAL(10, 2);
    SET @Bonus = @SalesAmount * 0.10; -- 10% of sales as bonus
    RETURN @Bonus
END;

2. رویه ذخیره شده برای اعمال پاداش:

CREATE PROCEDURE ApplyBonus
@EmployeeID INT, @SalesAmount DECIMAL(10, 2)
AS
BEGIN
    DECLARE @Bonus DECIMAL(10, 2);
    SET @Bonus = dbo.CalculateEmployeeBonus(@SalesAmount);
    UPDATE employees SET bonus = bonus + @Bonus WHERE employee_id = @EmployeeID;
    INSERT INTO bonus_log (employee_id, sales_amount, bonus, applied_at)
    VALUES (@EmployeeID, @SalesAmount, @Bonus, GETDATE());
END;

3. ماشه برای اعمال پاداش پس از فروش:

CREATE TRIGGER after_sale
AFTER INSERT ON sales
FOR EACH ROW
BEGIN
    CALL ApplyBonus(NEW.employee_id, NEW.amount);
END;

در این سناریو، هنگامی که یک فروش جدید ثبت می‌شود، تریگر after_sale رویه ذخیره شده ApplyBonus را فراخوانی می‌کند، که سپس از تابع CalculateEmployeeBonus برای تعیین پاداش و اعمال آن در رکورد کارمند استفاده می‌کند.

این نمونه‌های پیشرفته نشان می‌دهند که چگونه می‌توان از تریگرها، رویه‌های ذخیره‌شده و توابع با هم برای ساخت راه‌حل‌های پایگاه داده خودکار و قوی استفاده کرد. 

با خرید اشتراک می توانید تا چندین برابر مبلغ خرید اشتراک خود قالب های HTML ، سورس کدهای آماده و یا مقالات دانلود کنید
شما می توانید تنها فقط با مبلغ 3,000,000 میلیون تومان وب سایت سفارسی برای خود داشته باشید
محبوب ترین مقالات
تفاوت بین CSS و SCSS چیست؟ تفاوت بین CSS و SCSS چیست؟
category برنامه نویسی 07 اسفند 1402
تفاوت بین RDBMS و DBMS تفاوت بین RDBMS و DBMS
category برنامه نویسی 02 فروردین 1403
کاوش در معماری GPT-3 کاوش در معماری GPT-3
category هوش مصنوعی 12 اسفند 1402
کلمات کلیدی در SQL کلمات کلیدی در SQL
category برنامه نویسی 01 خرداد 1403
تفاوت بین CSS، SASS و SCSS چیست؟ تفاوت بین CSS، SASS و SCSS چیست؟
category برنامه نویسی 13 اسفند 1402
انواع Join در SQL انواع Join در SQL
category برنامه نویسی 02 فروردین 1403
ChatGPT چیست؟ ChatGPT چیست؟
category هوش مصنوعی 12 اسفند 1402
آخرین مقالات
🎨 نظریه یا تئوری طراحی چیست؟ 🎨 نظریه یا تئوری طراحی چیست؟ نظریه طراحی چارچوب فکری است که نحوه درک، خلق و ارزیابی طراحی را هدایت می‌کند. این نظریه، فلسفه، زیبایی‌شناسی، عملکرد و...
category کامپیوتر 05 مرداد 1404
سفر من به داستان‌سرایی بصری - طراحی رابط کاربری و طراحی لوگو سفر من به داستان‌سرایی بصری - طراحی رابط کاربری و طراحی لوگو چگونه سفر خود را به سمت طراحی لوگو، گرافیک و رابط کاربری/تجربه کاربری آغاز کنید. برای موفقیت در طراحی لوگو، طراحی گراف...
category کامپیوتر 02 مرداد 1404
🧠 درک هوش مصنوعی- از مبانی تا مرزها 🧠 درک هوش مصنوعی- از مبانی تا مرزها هوش مصنوعی تقریباً هر صنعتی را تغییر شکل می‌دهد، در این مقاله با یک مرور کلی آکادمیک سطح بالا شروع کنیم و آن را به بخش...
category هوش مصنوعی 27 تیر 1404