جداکننده یا delimiter در mySql

جداکننده یا delimiter در mySql

زمانی که شما دستورات SQL  می نویسید از سمیکولون (;) برای جداسازی دستورات استفاده می کنید. مشابه زیر:

SELECT * FROM products;

SELECT * FROM customers;

یک برنامه کلاینت MySql از جمله MySql workbrench یا MySql از جداکننده (;) برای جداسازی دستورات و اجرای جداگانه هر دستور استفاده می کند.

یک رویه ذخیره شده متشکل از چندین دستور است که با سمیکولون جدا می شوند.

اگر شما از برنامه کلاینتی MySql برای تعریف رویه ذخیره شده که متشکل از کاراکترهای سمیکولون است استفاده میکنید برنامه کلاینت MySql کل رویه ذخیره شده را به صورت یک دستور تکی رفتار نمی کند بلکه به شکل چند دستور رفتار می کند.

بنابراین، شما باید به طور موقت جدا کننده را تعریف مجدد کنید به طوری که شما می توانید کل رویه ذخیره شده را به سمت سرور به صورت یک دستور واحد ارسال کنید.

برای تعریف مجدد جدا کننده پیش فرض شما می توانید از دستور DELIMITER استفاده کنید.

DELIMITER delimiter_character

delimiter_character می تواند متشکل از یک کاراکتر تکی یا چند کاراکتر مثل $$ یا // باشد. هر چند شما باید از استفاده از بک اسلش \ خودداری کنید چون این کارکتر خروج در MySql ست.

برای مثال این دستور delimiter را به // تغییر می دهد.

DELIMITER //

یکبار که delimiter تغییر کند شما می توانید از جدا کننده جدید برای پایان یک دستور به صورت زیر استفاده کنید:

DELIMITER //

SELECT * FROM customers //

SELECT * FROM products //

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

DELIMITER ;

استفاده از جدا کننده MYSql برای رویه های ذخیره شده

یک رویه ذخیره شده نوعا متیشکل از چندین دستور است که با سمیکولون از هم جدا شده اند. برای اینکه کل رویه ذخیره شده را به صورت یک دستور واحد کامپایل کنیم به طور موقت می تواند جداکننده را از سمیکولون ; به جداکننده دیگیری مثل $$ یا // تغییر دهید:

DELIMITER $$

CREATE PROCEDURE sp_name()
BEGIN
  -- statements
END $$

DELIMITER ;

در این کد:

  • اول جدا کننده پیش فرض را به $$ غییر می دهیم
  • پیش از ; در بدنه رویه ذخیره شده و $$ بعد از کلمه کلیدی END برای پایان رویه ذخیره شده استفاده کنید.
  • در آخر جدا کننده را به حالت پیش فرض ; بر گردانید.