Showing posts with label mysql connect by using procedure. Show all posts
Showing posts with label mysql connect by using procedure. Show all posts

Friday, November 27, 2009

MySQL Connect by prior using procedure





MySQL doesn't provide a way to do connect by , so how do you tackle it ? You have to write your own function or procedure that will do the connect by . Here is an example of the skill table that is related to itself by s_parentskillid .

Here is the Code that will get the skills related till it gets to the parent .
Code:

DROP PROCEDURE IF EXISTS getskillpath;
CREATE PROCEDURE `getskillpath`(in skillid int ,in delimiter varchar(5), out v_skillpath varchar(500))
BEGIN

DECLARE v_skill VARCHAR(50); /* variable stores the name */
DECLARE v_skillid INT DEFAULT 0; /* skill id - primary key */
DECLARE v_parentskillid INT DEFAULT 0;
/* parent skill id - foreign key that maps to skill id */

SET v_skillid = skillid; /* assign first skillid to variable */

skill_loop: LOOP

SELECT s_parentskillid,
s_name
INTO
v_parentskillid,
v_skill
FROM skills
where s_id =v_skillid;

SET v_skillpath = CONCAT_WS ( delimiter,v_skill,v_skillpath );
/* set skillpath initially null */


IF v_parentskillid is null THEN
LEAVE skill_loop; /* condition to exit parent found */
else
SET v_skillid = v_parentskillid; /* reset the skill id to loop */
END IF;


END LOOP skill_loop;
SELECT v_skillpath; /* check output */


END;

Example output - sap>SAP Functional>Reports>Reports Sub . if I use 9 as the input skill and > as the delimiter .( rows affected are marked in the image ) .