Stored Procedures
Stored Procedures என்பது ஒன்று அல்லது அதற்கு மேற்பட்ட query-களை உள்ளடக்கிய ஒரு தொகுப்பு ஆகும். இவற்றைத் தனித்தனி query-களாக execute செய்வதைக் காட்டிலும், இதுபோன்று ஒன்றாகத் தொகுத்து execute செய்வதன் மூலம் database-ன் செயல்திறன் அதிகரிக்கிறது. இதுபோன்ற தொகுப்புகள்(Procedures) database-ன் server-ல் சேமிக்கப்படுவதால் இவை சேமிக்கப்பட்ட தொகுப்புகள்(Stored Procedures) என்று அழைக்கப்படுகின்றன.
Query1
முதலில் எளிமையான query-யை உள்ளடக்கிய stored procedure-ஐ எவ்வாறு உருவாக்குவது என்று பார்ப்போம்.
create procedure abc()
select * from payroll;
call abc();
இங்கு abc எனும் procedure உருவாக்கப்பட்டுவிட்டது. இதன் பின்னர் abc-ஐ அழைக்கும்போதெல்லாம் அதற்குள் உள்ள query, execute-செய்யப்பட்டு அதன் output மட்டுமே வெளிவரும்.
Query2:
ஒன்றுக்கும் மேற்பட்ட வரிகளை procedure-ல் எழுதும்போது அவற்றை begin, end எனும் keyword-க்குள் எழுத வேண்டும். மேலும் ; க்கு பதிலாக // ஐ delimiter-ஆகப் பயன்படுத்த வேண்டும். அப்போதுதான் நாம் உருவாக்கும் stored procedure, server-க்குள் சென்று சேமிக்கப்படும்.
எனவே DELIMITER // என்பது default ஆன ; க்கு பதிலாக // ஐ delimiter-ஆக மாற்றி அமைக்கும்.
delimiter //
create procedure xyz()
BEGIN
select * from employees limit 2;
select * from organisation limit 2;
END//
delimiter ;
call xyz();
ஒரு stored procedure உருவாக்கப்பட்ட பின்னர் மீண்டும் delimiter-ஐ ; க்கு மாற்றி அமைக்க DELIMITER ; என்று கொடுக்க வேண்டும். இது பின்வருமாறு.
delimiter ;
call xyz();
Passing Parameters
Query3:
ஏதேனும் ஒரு மதிப்பினை variable மூலமாக procedure-க்குள் செலுத்த IN keyword பயன்படுகிறது. இங்கு x என்பது variable ஆகும்.
delimiter //
create procedure m(IN x int(10))
BEGIN
select * from employees where salary<x;
END
//
delimiter ;
call m(10000);
Query4:
ஏதேனும் ஒரு மதிப்பினை procedure நமக்கு வெளிப்படுத்துமாறு செய்ய OUT keyword பயன்படுகிறது.
delimiter //
create procedure count_low_paid_people(IN salary_amount int(10), OUT total int)
BEGIN
select count(*) into total from employees where salary<salary_amount;
END
//
delimiter ;
call count_low_paid_people(10000,@total);
select @total;
select * from employees where salary<10000;
Query5:
ஏதேனும் ஒரு மதிப்பினை procedure-க்குள் செலுத்தி, அதன்மீது சில கணக்கீடுகள் செய்து மீண்டும் அந்த மதிப்பினை procedure வெளிப்படுத்துமாறு செய்ய INOUT keyword பயன்படுகிறது.
DELIMITER //
CREATE PROCEDURE set_counter(INOUT count INT(4),IN inc INT(4))
BEGIN
SET count = count + inc;
END
//
DELIMITER ;
SET @counter = 1;
CALL set_counter(@counter,1); — 2
CALL set_counter(@counter,1); — 3
CALL set_counter(@counter,5); — 8
SELECT @counter; — 8
Query6:
Case statement-ஐ query-ல் எவ்வாறு பயன்படுத்துவது என்று query 47-ல் பார்த்தோம். இப்போது அதனையே எவ்வாறு stored procedure-ல் அமைப்பது என்று பின்வருமாறு பார்க்கலாம்.
DELIMITER //
CREATE PROCEDURE GetCustomerLevel(in p_customerNumber int(11),
out p_customerLevel varchar(10))
BEGIN
DECLARE creditlim double;
SELECT creditlimit INTO creditlim
FROM customers
WHERE customerNumber = p_customerNumber;
CASE
WHEN creditlim > 50000 THEN
SET p_customerLevel = ‘PLATINUM’;
WHEN (creditlim <= 50000 AND creditlim >= 10000) THEN
SET p_customerLevel = ‘GOLD’;
WHEN creditlim < 10000 THEN
SET p_customerLevel = ‘SILVER’;
END CASE;
END
//
இங்கு
Credit limit:
> 50 K = Platinum
<50K & > 10 K = Gold
<10K = Silver
CALL GetCustomerLevel(112,@level);
SELECT @level AS ‘Customer Level’;
Result:
PLATINUM