Displaying the records from a mysql stored procedure - mysql

I am just starting to learn how to write stored procedures in MYSQL and I've hit a roadblock.
I wrote the following code:
DELIMITER $$
DROP PROCEDURE IF EXISTS `emscribedx`.`countcodes` $$
CREATE PROCEDURE `emscribedx`.`countcodes` ()
BEGIN
declare doneprocessing int default 0;
declare thisaccount varchar(50);
declare countcursor cursor for select acct from patientid where patienttype='P';
declare continue handler for not found
set doneprocessing = 1;
Fetch countcursor into thisaccount;
Repeat
select * from doc_table where acct = thisaccount;
until doneprocessing = 1
END repeat;
close countcursor;
END $$
DELIMITER ;
I would like to display the results of the select statement that occurs after the repeat statement. But how do I do that? When I execute the stored procedure, nothing happens?
Thank you,
Elliott

The procedure can only return the results of a single query, why not use this instead?
SELECT doc_table.*
FROM doc_table
INNER JOIN patientid
ON patientid.acct = doc_tableacct
WHERE patientid.patienttype='P';
It can be put inside of a procedure if you want.

Related

Issue when declaring a variable for parameter

in my SQL version community-8.0.11.0:
I'm getting an error when declaring the variable in the below code.
use `mydb`;
Delimiter //
declare V_id char(30);
set V_id = 'AM-439';
select * from tableA
where TableID= V_id;
Delimiter;
Could anyone help me, please?
You need to include the code in a stored procedure, you can't just declare a variable in a sql script in MySQL.
This seems to work:
USE `mydb1`;
DROP procedure IF EXISTS `new_procedure`;
DELIMITER $$
USE `mydb1`$$
CREATE PROCEDURE `new_procedure` ()
BEGIN
declare V_id char(30);
set V_id = 'AM-439';
select * from tableA
where TableID= V_id;
END$$
DELIMITER ;
call `new_procedure`;

MySQL Stored Proc's Param with IN Varchar() not looping the cursor

I am trying to get the following to work while testing Stored Procedures, but it doesnt. Can someone point out whats wrong?
The idea is to take in a list of userids as csv, and return their email addresses as csv.
(This is just for testing stored proc. in mysql. I know I could just simply select it with regular sql query)
DELIMITER $$
DROP PROCEDURE IF EXISTS `build_email_list`$$
CREATE DEFINER=`root`#`localhost` PROCEDURE `testing_email_list`(IN user_ids VARCHAR(200), INOUT email_list VARCHAR(4000))
BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_email VARCHAR(100) DEFAULT "";
DECLARE email_cursor CURSOR FOR
SELECT email_address FROM users WHERE id IN (user_ids);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;
OPEN email_cursor;
get_email: LOOP
FETCH email_cursor INTO v_email;
IF v_finished = 1 THEN LEAVE get_email; END IF;
SET email_list = CONCAT(v_email, ";", email_list);
END LOOP get_email;
CLOSE email_cursor;
END$$
DELIMITER ;
Calling it like this:
SET #email_list = "";
CALL testing_email_list("1,8", #email_list);
SELECT #email_list;
However, it only returns the first id passed (i.e. 1). But when I change the stored proc to directly take these ids with the following it works fine:
DECLARE email_cursor CURSOR FOR
SELECT email_address FROM users WHERE id IN (1,8);
This is driving me nuts, what am I missing here?
Thanks a lot.

Getting error in creating procedure

I created a procedure but when i tried to execute its giving an error that no database is selected.Here is my procedure.
DELIMITER $$
create procedure myproced
as
declare arpt varchar(10);
declare num int;
BEGIN
use lookup;
create temporary table lookup.airportname as (select distinct name from lookup.airpot);
select count(*) into num from (select * from airportname);
END;
$$
I have also seen some posts in stack overflow regarding the same problem.They had mentioned to select the database from drop down if u are working with mysql workbench.I am using mysql query browser.Even i had mentioned use database.But still it is prompting error.
Try adding this line to your procedure declaration :
create procedure `lookup`.myproced
This might solve your problem, I use this kind of declaration with my own procedures and never got any such problem.
Use USE statement outside the procedure. Not required inside.
DELIMITER $$
USE [DAtabase Name]$$
DELIMITER $$
create procedure myproced
as
declare arpt varchar(10);
declare num int;
BEGIN
create temporary table lookup.airportname as (select distinct name from lookup.airpot);
select count(*) into num from (select * from airportname);
END;
$$

Mysql stored procedure multiple selects

I am running a stored procedure. The issue seems to be that it will go into the if statement. Also for some reason or another regardless of how many selects I use it will only return the first. I've copied this from another stored procedure that works like a charm, but this one just won't go. Any ideas?
DROP PROCEDURE IF EXISTS genSelPriceTier;
DELIMITER $$
CREATE PROCEDURE genSelPriceTier(tier_id INT, default_id INT)
BEGIN
DECLARE rowCount INT DEFAULT 0;
SELECT * FROM price_tier WHERE price_tier_id = tier_id;
SET rowCount = FOUND_ROWS();
IF rowCount < 1 THEN
SELECT * FROM price_tier WHERE price_tier_id = default_id;
END IF;
END$$
DELIMITER ;
There is a bug reported related to the usage of FOUND_ROWS(). So, I recommend using Count(*) for the number of rows returned. Something like the following should work.
DROP PROCEDURE IF EXISTS genSelPriceTier;
DELIMITER $$
CREATE PROCEDURE genSelPriceTier(tier_id INT, default_id INT)
BEGIN
DECLARE rowCount INT DEFAULT 0;
SELECT COUNT(*) INTO rowCount FROM price_tier WHERE price_tier_id = tier_id
IF rowCount < 1 THEN
SELECT * FROM price_tier WHERE price_tier_id = default_id;
END IF;
END$$
DELIMITER ;

Getting errors when trying to create a PROCEDURE in mysql

I am trying to create a mysql stored procedure, but I get this error:
Script line: 2 Failed to CREATE PROCEDURE proc_test_bideep
The stored procedure code is:
DELIMITER $$
DROP PROCEDURE IF EXISTS `commun`.`insert_categorie` $$
CREATE PROCEDURE `commun`.`insert_categorie` (id_mere INT,
lib_categ VARCHAR(50),
id_categ_sup INT ,
categ_authInstantBuy INT)
BEGIN
SET #bg_mere := (SELECT categ_bg FROM categ_basic WHERE categ_id = id_mere);
#bg_mere+2,categ_level_bideep,categ_statut,categ_adult,categ_authSmallBid,categ_authBid,categ_authInstantBuy);
SELECT '1' AS code_retour; END IF;
ecetera.........
END $$
DELIMITER ;
a) You need to DECLARE any variables on the first lines of the procedure, including their datatype:
DECLARE bg_mere INT;
b) To fetch a value from the database into a variable, you use SELECT ... INTO syntax:
SELECT categ_bg INTO bg_mere FROM categ_basic WHERE categ_basic.categ_id = id_mere;
c) You have an END IF without the corresponding IF.
d) The closing END needs a semicolon (not BEGIN though), only then do you need a delimiter to finish the entire statement, and finally you should reset the delimiter back to normal:
BEGIN
# body of the stored procedure goes here
END;
$$
DELIMITER ;
Your parameters are missing the keyword IN such as: ...(IN id_mere INT, IN lib_categ ...). Also, you need to configure your OUT variable for #bg_mere in the initial parameter list such as (IN xxx, ..., OUT bg_mere VARCHAR/INT/WHATEVER).