آموزش Store Procedures در MySQL


با معرفی MySql 5 مجموعه از امکانات جدید معرفی شد . Procedures یکی از امکاناتی بود که زندگی برنامه نویس رو راحت تر کرد. امروز باهم دیگه Procedures رو بررسی میکنیم و نحوه کارشون آشنا میشیم .

مجموعه ای از دستورات تعریف شده SQL که در سرور ذخیره میشوند . eima web

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

استفاده از این ویژگی مزیت های زیادی داره مثل :

  • امکان استفاده از کد ها در application های مختلف
  • کم کردن بار ترافیک روی سرور ( حدود ۶۰% از ترافیک رو کمتر میکنه )
  • افزایش امنیت query های دیتابیس شما

خوب اول از همه یه نرم افزار مناسب برای کار با mysql پیدا کنید ( من Navicat رو پیشنهاد میدم ) چون سیستم محبوب PHPMyadmin در آخرین آپدیتی که ازش شد بخش Procedures کلا باگ داره .

قدم اول — انتخاب Delimiter

ما باید به SQL بفهمونیم که کدمون شروع شد و حالا اینجا تموم شده برای اینکار از Delimiter استفاده میکنیم که من توی این آموزش از // استفاده میکنم ( شما هرچیزی که دوست دارید میتونید استفاده کنید )) .

مرحله دوم — نحوه کار Store Procedure

DELIMITER // CREATE PROCEDURE `p2` () LANGUAGE SQL DETERMINISTIC SQL SECURITY DEFINER COMMENT ‘A procedure’ BEGIN SELECT ‘Hello World !’; END//

خوب ما در مرحله اول Delimiter رو تعریف کردیم و بعد از اون یک اسم دلخواه برای Procedure خودمون انتخاب کریدم. دقت کنید که اسم Procedure ها نمیتونن تکراری باشن و ما به این وسیله به یک Procedure دسترسی پیدا می کنیم . بعد از انتخاب اسم یکسری متغیر های دلخواه اضافه میکنیم که باهم اونها رو بررسی می کنیم .

LANGUAGE : برای پرتابل کردن سیستم و استفاده از دیتابیس های دیگر . مقدار پیشفرض SQL می باشد .

DETERMINISTIC : اگر دیتابیس به شما همیشه یک مقدار ثابت با توجه به ورودی ها میده . مقدار پیشفرض DETERMINISTIC می باشید .

SQL Security: زمان فراخوانی دسترسی های کابر رو بررسی میکنه و مقدار پیشفرض DEFINER می باشد .

Comment : توضیحات دستور هستش و مقدار پیشفرض برابر ” ” می باشد .

نحوه استفاده و فراخوانی Store Procedure

برای فراخوانی شما فقط نیاز به دستور CALL و در ادامه نوشتن اسمی که برای Procedure انتخاب کردید . بعد از اون باید پارامتر ها و مقادیر رو جایگذاری کنید .

CALL stored_procedure_name (param1, param2, ….)
CALL procedure1(10 , ‘string parameter’ , @parameter_var);

حذف یک Procedure

از دستور ساده زیر استفاده می کنیم .

DROP PROCEDURE IF EXISTS p2;

مرحله سوم — پارامتر ها

باهم به بررسی پارامتر ها در procedure ها میپردازیم .

CREATE PROCEDURE proc1 () : پارامتری وجود ندارد

CREATE PROCEDURE proc1 (IN varname DATA-TYPE) : یک مقدار ورودی (IN به مغنای input می باشد )

REATE PROCEDURE proc1 (OUT varname DATA-TYPE) : یک مقدار خروجی

CREATE PROCEDURE proc1 (INOUT varname DATA-TYPE) : یک مقدار خروجی و ورودی

شما میتوانید پارامتر های مختلف با مقادیر مختلف ایجاد کنید .

یک مثال رو بررسی می کنیم :

IN :

DELIMITER //
CREATE PROCEDURE `proc_IN` (IN var1 INT)
BEGIN
SELECT var1 + 2 AS result;
END//

OUT :

DELIMITER // CREATE PROCEDURE `proc_OUT` (OUT var1 VARCHAR(100)) BEGIN SET var1 = ‘This is a test’; END //

INOUT :

DELIMITER //
CREATE PROCEDURE `proc_INOUT` (OUT var1 INT)
BEGIN
SET var1 = var1 * 2;
END //

مرحله چهارم — ساخت متغیر

این مرحله باهم ساخت متغیر رو یاد میگیریمُ و نحوه ذخیره مقادیر رو در یک Procedure بررسی می کنیم . برای ساخت متغیر از ساختار زیر استفاده می کنیم

DECLARE varname DATA-TYPE DEFAULT defaultvalue;

و چند تا متغیر هم برای تمرین بسازیم

DECLARE a, b INT DEFAULT 5;
DECLARE str VARCHAR(50);
DECLARE today TIMESTAMP DEFAULT CURRENT_DATE;
DECLARE v1, v2, v3 TINYINT;

بعد از یکبار ساخت متغیر شما میتونید هرجایی از Procedure ار اونها استفاده کنید .

کار با متغیر ها

وقتی متغیر تعریف شد شما میتونید اونها رو با SET یا Select در Procedure قرار بدید .

DELIMITER //
CREATE PROCEDURE `var_proc` (IN paramstr VARCHAR(20))
BEGIN
DECLARE a, b INT DEFAULT 5;
DECLARE str VARCHAR(50);
DECLARE today TIMESTAMP DEFAULT CURRENT_DATE;
DECLARE v1, v2, v3 TINYINT;
INSERT INTO table1 VALUES (a);
SET str = ‘I am a string’;
SELECT CONCAT(str,paramstr), today FROM table2 WHERE b >=5;
END //


Originally published at www.eima-web.com on September 22, 2014.