برای کار با بانک اطلاعاتی روش های متداول و مرسوم زیادی وجود دارد. اما یک روشی که خیلی مورد پسند بنده واقع شده، روشی است که در آن با استفاده از استور پروسیجرها کار هایم با دیتابیس را انجام می دهم. استور پروسیجر ها امکانی است که برخی نرم افزارهای مدیریت پایگاه داده ها آن را حمایت کرده و برخی خیر. از جلمه این پایگاه داده ها می توان از MySQL، MSSQL
و... نام برد.
در این نوشته نحوه ایجاد و کار با این امکان در نرم افزار مدیریت پایگاه داده های MySQL
را بیان می کنم.
یک روتین ذخیره شده شامل یک سری کدهای SQL
ذخیره شده در بانک اطلاعاتی می باشند.
استور پروسیجر روشی برای انجام یک سری دستورات متداول و تکراری مورد نیاز است. آن به شما امکان تعریف متغییر، دنبال کردن کنترل و استفاده از دیگر تکنیک های برنامه نویسی را می دهد.
سعی می کنم که مراحل ایجاد یک استور پروسیجر را در چند گام به طور مختصر بیان کنم. امید وارم که مفید و کاربردی باشد.
مراحل کار به ترتیب زیر می باشد:
گام ۱: انتخاب جداکننده
جداکننده یک یا رشته ای از حروف است که پایان یک فرمان SQL
را مشخص می کند. به طور کلی، تا به امروز این جداکننده حرف (;)
بوده ولی برای استفاده در استور پروسیجرها مشکلاتی را ایجاد می کند. پس بهتر است تا از حرف یا حروفی دیگ به جای آن استفاده شود. در این مثال از دو حرف (//)
استفاده می کنیم.
گام ۲ : نحوه کار با استور پروسیجرها
ایجاد یک استور پروسیجر
DELIMITER //
CREATE PROCEDURE `p2` ()
LANGUAGE SQL
DETERMINISTIC
SQL SECURITY DEFINER
COMMENT 'A procedure'
BEGIN
SELECT 'Hello World !';
END//
بخش اول دستورات پروسیجر را ایجاد نموده. بخش بعدی کدهایی هستند که ویژگی های پروسیجر را تعریف می نمایند. و در نهایت نام و بدنه پروسیجر را داریم.
تعریف نام استور پروسیجرها به کوچک یا بزرگ بودن حروف حساس نبوده، و پروسیجر های همنام نیز نمی توان تعریف کرد. در قسمت بدنه پروسیجر نمی توان از دستورات ویرایشی دیتابیس استفاده کرد.
چهار ویژگی تعریف شده در این مثال:
Language
: به منظور قابل حمل و استفاده در جاهای مختلف است. پیش فرض آنSQL
می باشد.Deterministic
: این دستور برای اهدافreplication
وlogging
استفاده می شود. مقدار پیش فرض آنNOT DETERMIINISTIC
است.SQL Security
: به هنگام فراخوانی پروسیجر، مجوزهای دسترسی کاربر را بررسی می کند. مقدارINVOKE
کاربری است که پروسیجر را فراخوانی می کند. مقدارDEFENDER
کاربر ایجاد کننده پروسیجر می باشد. مقدار پیش فرضDEFENDER
است.Comment
: به منظور افزودن توضیحات به کدها می باشد. مقدار پیش فرض " " می باشد.
فراخوانی یک استور پروسیجر
برای این منظور فقط نیاز است تا از کلمه کلیدی CALL
به همراه نام استور پروسیجر و پرانتزهای آن مشتمل بر تمام پارامترهای تعریف شده استفاده کرد. پرانتزها الزامی هستند.
CALL stored_procedure_name (param1, param2, ....)
CALL procedure1(10 , 'string parameter' , @parameter_var);
تغییر یک استور پروسیجر
برای این منظور MySQL
دستور ALTER PROCEDURE
را دارد، اما قط امکان تغییر ویژگی های مشخصی را می دهد. برای تغییر بدنه یا پارامترها باید پروسیجر را حذف و مجدد ایجاد نمایید.
حذف یک استور پروسیجر
DROP PROCEDURE IF EXISTS p2;
این یک فرمان خیلی ساده است. قسمت IF EXIST
از وقع خطا در صورتی که پروسیجر وجود نداشته باشد جلوگیری می کند.
گام ۳: پارامترها
اجازه بدید تا نحوه تعریف انواع پارامترها را در استور پروسیجرها را نشان دهم:
CREATE PROCEDURE proc1 ()
: فاقد پارامترCREATE PROCEDURE proc1 (IN varname DATA-TYPE)
: یک پارامتر ورودی. پارامترها به طور پیش فرض ورودی هستند. استفاده از این کلمه ااختیاری است(IN).CREATE PROCEDURE proc1 (OUT varname DATA-TYPE)
: یک پارامتر خروجی.CREATE PROCEDURE proc1 (INOUT varname DATA-TYPE)
: یک پارامتر که هم ورودی است و هم خروجی.
مثال برای پارامتر ورودی:
DELIMITER //
CREATE PROCEDURE `proc_IN` (IN var1 INT)
BEGIN
SELECT var1 + 2 AS result;
END//</pre>
مثال برای پارامتر خروجی:
DELIMITER //
CREATE PROCEDURE `proc_OUT` (OUT var1 VARCHAR(100))
BEGIN
SET var1 = 'This is a test';
END //</pre>
مثال برای پارامتر ورودی/خروجی:
DELIMITER //
CREATE PROCEDURE `proc_INOUT` (INOUT var1 INT)
BEGIN
SET var1 = var1 * 2;
END //</pre>
در این نوشته با بخشی از Stored Procedure
ها در MySQL
آشنا شدید. ادامه این مطلب را در بخش دوم از این نوشته می توانید دنبال کنید