Advanced MySQL – Stored Procedures

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

%d bloggers like this: