با سلام و عرض ادب خدمت همراهان گرامی روکسو. در این جلسه می خواهیم در رابطه با stored procedure ها و کامنت ها صحبت کنیم. stored procedure در واقع مانند توابعی برای کدهای SQL هستند تا شما نیازی به دوباره نویسی نداشته باشید و می توانند در دنیای برنامه نویسی به شما کمک بسیار زیادی بکنند. کامنت ها نیز در بحث یادگیری و نوت برداری شخصی در پروژه های بزرگ از اهمیت ویژه ای برخوردار هستند بنابراین بهتر است بدون مقدمه وارد مبحث جلسه ی امروز شویم!
Stored Procedure ها (به معنی «رویه ی ذخیره شده») کدهای SQL ای هستند که می توانید آن ها را ذخیره کنید تا بعدا و در صورت نیاز دوباره یا چندین باره از آن استفاده کنید. بنابراین اگر کد SQL ای دارید که مرتبا از آن استفاده می کنید و مجبور هستید هر بار آن را بنویسید، می توانید آن را به عنوان stored procedure ذخیره کنید و هر زمان لازمش داشتید صدایش بزنید.
شما حتی می توانید به stored procedure ها پارامتر هم بدهید تا بر اساس پارامتر های ورودی عمل کنند و انعطاف پذیر باشند.
ساختار کلی برای ایجاد یک stored procedure به شکل زیر است:
CREATE PROCEDURE procedure_name AS sql_statement GO;
و ساختار فراخوانی آن نیز به این شکل:
EXEC procedure_name;
می خواهیم برخی از مثال های خود را روی جدول Customers پیاده کنیم بنابراین ابتدا نگاهی به آن می اندازیم:
Country | PostalCode | City | Address | ContactName | CustomerName | CustomerID |
Germany | 12209 | Berlin | Obere Str. 57 | Maria Anders | Alfreds Futterkiste | 1 |
Mexico | 05021 | México D.F. | Avda. de la Constitución 2222 | Ana Trujillo | Ana Trujillo Emparedados y helados | 2 |
Mexico | 05023 | México D.F. | Mataderos 2312 | Antonio Moreno | Antonio Moreno Taquería | 3 |
UK | WA1 1DP | London | 120 Hanover Sq. | Thomas Hardy | Around the Horn | 4 |
Sweden | S-958 22 | Luleå | Berguvsvägen 8 | Christina Berglund | Berglunds snabbköp | 5 |
مثال اول - دستور SQL زیر تمام مشتریان را از جدول Customers انتخاب می کند. نام این stored procedure را SelectAllCustomers (به معنی «تمام مشتریان را انتخاب کن») گذاشته ایم:
CREATE PROCEDURE SelectAllCustomers @City nvarchar(30) AS SELECT * FROM Customers WHERE City = @City GO;
و زمانی که بخواهیم آن را فراخوانی کنیم به این شکل عمل می کنیم:
EXEC SelectAllCustomers City = "London";
ایجاد چندین پارامتر به جای یک پارامتر کار آسانی است. تنها کافی است که هر پارامتر و نوع داده ی آن را مشخص کنید و هر مورد را با ویرگول جدا کنید.
مثال اول - دستور SQL زیر ابتدا به سراغ جدول Customers می رود و مشتریانی را انتخاب می کند که اولا از شهر خاصی باشند و دوما کد پستی (PostalCode) خاصی داشته باشند:
CREATE PROCEDURE SelectAllCustomers @City nvarchar(30), @PostalCode nvarchar(10) AS SELECT * FROM Customers WHERE City = @City AND PostalCode = @PostalCode GO;
و زمانی که بخواهیم آن را فراخوانی کنیم به این شکل عمل می کنیم:
EXEC SelectAllCustomers City = "London", PostalCode = "WA1 1DP";
مانند اکثر زبان های برنامه نویسی و غیر آن، شما در SQL اجازه ی استفاده از کامنت ها را دارید که عموما دو استفاده ی کلی دارند:
قبل از ادامه ی بحث باید نکته ای را گوشزد کنم؛ مثال های این جلسه در مرورگر های فایرفاکس و IE کار نمی کنند بنابراین از مرورگر کروم استفاده کنید.
کامنت های یک خطی در زبان SQL با علامت های -- شروع می شوند بنابراین هر متنی که بین -- و پایان خط قرار بگیرد کامنت محسوب شده و اجرا نخواهد شد. به مثال زیر توجه کنید:
-- Select all: SELECT * FROM Customers;
اجرای این دستور در پایگاه داده ی Northwind
قسمت "Select all" در کد بالا از آنجا که بعد از -- قرار گرفته است کامنت محسوب شده و نادیده گرفته می شود.
در مثال بعدی می خواهیم شرط WHERE را به صورت موقت حذف کنیم. چرا؟ تصور کنید در حال برنامه نویسی و انجام یک پروژه هستید و می خواهید مشکلی را در برنامه تان پیدا کنید. معمولا در این شرایط برنامه نویسان سعی می کنند قسمت های مختلف برنامه را ایزوله کنند؛ یعنی جزئیات را حذف کرده و از کل به جزء حرکت کنند تا ببینند کدام خط از کد باعث ایجاد مشکل شده است. اگر در پروژه های بزرگ بخواهید قسمتی از کد را حذف کنید ممکن است بعدا فراموش کنید این کد متعلق به کدام قسمت بوده است و باعث سر در گمی خودتان بشوید اما با استفاده از کامنت ها می توانید موقتا آن را غیر فعال کنید و بعدا به راحتی آن را به حالت اولیه برگردانید:
SELECT * FROM Customers -- WHERE City='Berlin';
اجرای این دستور در پایگاه داده ی Northwind
می توان همین اتفاق را در چنین حالتی نیز مشاهده کرد:
--SELECT * FROM Customers; SELECT * FROM Products;
اجرای این دستور در پایگاه داده ی Northwind
کامنت های چند خطی در زبان SQL با علامت */ شروع شده و با /* نیز پایان می یابند بنابراین هر متنی که بین /* و */ باشد نادیده گرفته می شود (کامنت محسوب می شود). در مثال زیر یک نمونه ی جالب از کامنت های چند خطی را مشاهده می کنیم:
/*Select all the columns of all the records in the Customers table:*/ SELECT * FROM Customers;
اجرای این دستور در پایگاه داده ی Northwind
شما می توانید به راحتی با حذف کردن علامت های کامنت کد را به حالت دیگری تغییر دهید و ببینید قبل از کامنت شدن آن قسمت، کد چه کاری انجام می داده است.
همچنین می توانی به جای یک دستور یا استفاده از کامنت یک خطی برای چندین دستور مختلف، یک بار از کامنت های چند خطی استفاده کنیم:
/*SELECT * FROM Customers; SELECT * FROM Products; SELECT * FROM Orders; SELECT * FROM Categories;*/ SELECT * FROM Suppliers;
اجرای این دستور در پایگاه داده ی Northwind
همچنین در مورد حذف قسمت خاصی از یک دستور و فایده ی آن صحبت کردیم اما این بحث مخصوص کامنت های تک خطی نیستند و شما می توانید آن را به این شکل نیز پیاده کنید:
SELECT CustomerName, /*City,*/ Country FROM Customers;
اجرای این دستور در پایگاه داده ی Northwind
حتی می توانیم پیشرفته تر عمل کنیم و کد را به این شکل نیز بنویسیم:
SELECT * FROM Customers WHERE (CustomerName LIKE 'L%' OR CustomerName LIKE 'R%' /*OR CustomerName LIKE 'S%' OR CustomerName LIKE 'T%'*/ OR CustomerName LIKE 'W%') AND Country='USA' ORDER BY CustomerName;
اجرای این دستور در پایگاه داده ی Northwind
همانطور که می بینید در پرانتز قسمتی از میان یک کد را غیر فعال کرده ایم. تصور کنید برای تست کردن برنامه تان یا عیب یابی از آن مجبور به حذف آن می شدید! تجربه ثابت کرده است که در بسیاری از مواقع اگر کدهایتان را در این حالت پیچیده حذف کنید، دوباره نوشتنشان آسان تر است تا درست کردن قسمت حذف شده!
امیدوارم از این قسمت لذت برده باشید. دستورات SQL برای کار با داده ها در این قسمت به پایان می رسد و از قسمت بعدی با دستوراتی آشنا می شویم که کار ساخت پایگاه داده، ساخت جدول، تعیین primary key و ... را بر عهده دارند. این مباحث بسیار مهم هستند بنابراین با ما همراه باشید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.