نحوه ایجاد یک Stored Procedures در MySQL5- بخش اول

برای کار با بانک اطلاعاتی روش های متداول و مرسوم زیادی وجود دارد. اما یک روشی که خیلی مورد پسند بنده واقع شده، روشی است که در آن با استفاده از استور پروسیجرها کار هایم با دیتابیس را انجام می دهم. استور پروسیجر ها امکانی است که برخی نرم افزارهای مدیریت پایگاه داده ها آن را حمایت کرده و برخی خیر. از جلمه این پایگاه داده ها می توان از 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 آشنا شدید. ادامه این مطلب را در بخش دوم از این نوشته می توانید دنبال کنید

برچسب ها: database sql mysql stored_procedure
من در stackexchange.com