I'm trying to write a stored procedure in Mysql phpmyadmin, the procedure is
DELIMITER $$
DROP FUNCTION IF EXISTS `shopping_portal`.`f_authenticate_admin`$$
CREATE PROCEDURE =`root`#`localhost` FUNCTION `f_authenticate_admin`(l_username VARCHAR(50),l_password VARCHAR(50)) RETURNS int(11)
BEGIN
DECLARE exist INT DEFAULT 0;
SELECT count(*) INTO exist FROM admin WHERE username=l_username and password=MD5(l_password);
RETURN exist;
END$$
DELIMITER ;
but it is throwing the error
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=`root`#`localhost` FUNCTION `f_authenticate_admin`(l_username VARCHAR(50),l_pas' at line 1
Help me in writing this procedure. Thanks in advance.
Well, multiple issues:
You're mixing procedures and functions, those are two different stories. And you're probably looking for DEFINER with your = root#localhost. And you want to use single quotes instead of backticks (I'm not sure though, if that's really an issue). Anyway, let me rewrite it for you...
DROP PROCEDURE IF EXISTS `shopping_portal`.`f_authenticate_admin`;
DELIMITER $$
CREATE DEFINER = 'root'#'localhost' PROCEDURE `f_authenticate_admin`(IN l_username VARCHAR(50), IN l_password VARCHAR(50), OUT result tinyint)
BEGIN
SELECT EXISTS(SELECT 1 FROM admin WHERE username=l_username and password=MD5(l_password)) INTO result;
END$$
DELIMITER ;
You then call it like this:
CALL f_authenticate_admin('test_username', 'a_password', #a_variable);
Then you have your result in #a_variable.
SELECT #a_variable;
Result is either 1 or 0.
Related
I get that error when I try to create a procedure. I dont know what's failing and I searched a lot if someone has the same error than me, but usually they mistake at delimiters, and I think i have them right.
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
SELECT SUM(robatori.quantitat_robada) FROM robatori WHERE param1=jugador_lla' at line 1 "
My query is the next:
DELIMITER //
CREATE PROCEDURE robatoris (IN param1 VARCHAR)
SELECT SUM(robatori.quantitat_robada) FROM robatori WHERE param1=jugador_lladre;
//
DELIMITER ;
Thanks you all, that's my first question here. :)
You are missing the length for input param on type VARCHAR.
Change it like the following:
DELIMITER //
CREATE PROCEDURE robatoris ( IN param1 VARCHAR(255) )
SELECT SUM(robatori.quantitat_robada)
FROM robatori
WHERE param1=jugador_lladre;
//
DELIMITER ;
As you have only statement to execute, the BEGIN - END block was optional.
But it is advised to practice it in all cases.
DELIMITER //
CREATE PROCEDURE robatoris ( IN param1 VARCHAR(255) )
BEGIN
SELECT SUM(robatori.quantitat_robada)
FROM robatori
WHERE param1=jugador_lladre;
END;
//
DELIMITER ;
Add BEGIN and END. Use TEXT type:
DELIMITER //
CREATE PROCEDURE robatoris (IN param1 TEXT)
BEGIN
SELECT SUM(robatori.quantitat_robada)
FROM robatori
WHERE param1=jugador_lladre;
END//
DELIMITER ;
I'm creating procedure which is having two parameters , one is p_cursor of type SYS_REFCURSOR (OUT param) and the other one is p_rank of type INT(IN param). But it showing an error.
DELIMITER $$
CREATE PROCEDURE sp_student(p_cursor OUT SYS_REFCURSOR,p_rank IN INT)
BEGIN
OPEN p_cursor FOR SELECT * FROM student WHERE rank = p_rank;
END$$
DELIMITER ;
the error what I'm getting is,
Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUT SYS_REFCURSOR,p_rank IN INT)
BEGIN
OPEN p_cursor FOR SELECT * FROM st' at line 1
I think I'm syntactically wrong for SYS_REFCURSOR.. please check my code and let me realise my mistake.
thanks in advance
mysql doesnt have refcursor like oracle, if u r planning to write a stored procedure that returns multiple rows/result set in mysql just do
DROP procedure IF EXISTS `sample`;
DELIMITER $$
CREATE PROCEDURE `sample`(p_rank IN INT)
BEGIN
select * from MyTable where id=p_rank;
END$$
DELIMITER ;
call sample();
this will return a result set. which u can use.
I am new to mysql and I cant see why I have an error when I create my stored procedure.
DELIMITER |
CREATE PROCEDURE lastscan(IN task_id_var INT)
BEGIN
SELECT COUNT(*) FROM debugger WHERE task_id=task_id_var INTO #total|
SET #total=#total+1|
INSERT INTO debugger SET scan_num=#total, task_id=task_id_var|
END|
DELIMITER;
I get :
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
I also dont get, why do I need to use that delimiter syntax.. ? DELIMITER | and then again DELIMITER;...what its function
DELIMITER |
CREATE PROCEDURE lastscan(IN task_id_var INT, IN file_name_var VARCHAR(110))
BEGIN
SELECT COUNT(*) FROM debugger WHERE task_id=task_id_var INTO #total;
SET #total=#total+1;
INSERT INTO debugger SET scan_num=#total, task_id=task_id_var, file_name=file_name_var;
END|
DELIMITER;
This works for me. no need to put | delimiter in sored procedure. I think it is meant to be for the stored procedure and not for what is inside the body
You can't simply assign variables like that, you need the SET keyword first.
http://dev.mysql.com/doc/refman/5.1/en/set-statement.html
So you code should be something like this (tested with phpMyAdmin):
DELIMITER //
CREATE PROCEDURE lastscan(IN task_id_var INT)
BEGIN
SELECT COUNT(*) FROM debugger WHERE task_id=task_id_var INTO #total;
SET #total=#total+1;
INSERT INTO debugger SET scan_num=#total, task_id=task_id_var;
END;//
DELIMITER ;
The DELIMITER keyword is used to stop additional semicolons in your procedure to be the end of the current statement, so by redefining the delimiter to // MySql will process the whole CREATE PROCEDURE-block as one single statement and not stop at the first semicolon but instead wait for the first occurrence of //.
http://dev.mysql.com/doc/refman/5.1/en/stored-programs-defining.html
I am new at MySql and i have a problem with my stored procedure. I am trying to create a new sp for insert like:
CREATE DEFINER = CURRENT_USER PROCEDURE
`NewProc`
(
IN `PCountryId` binary(16),
IN `PCountryName` varchar(50),
IN `PCountryLongitude` float,
IN `PCountryLatitude` float
)
BEGIN
INSERT INTO
country
(
CountryId,
CountryName,
CountryLongitude,
CountryLatitude
)
VALUES
(
PCountryId,
PCountryName,
PCountryLongitude,
PCountryLatitude
)
END;
but when i try to run i get this error:
[Err] 1064 - You have an error in your
SQL syntax; check the manual that
corresponds to your MySQL server
version for the right syntax to use
near 'END' at line 25
Could you please help me to figure out this problem?
Thank you
EDIT
When I remove the definer
DEFINER = CURRENT_USER
it works fine.
The default DEFINER value is CURRENT_USER.
MySQL 5.0 Manual 12.1.9.:
If you do not have the SUPER
privilege, the only legal user value
is your own account, either specified
literally or by using CURRENT_USER.
You cannot set the definer to some
other account.
The delimiter inside the stored procedure has to be different from the current delimiter, so you have to write your procedure like this:
(Disclaimer: I didn't test your procedure so there might be other problems that apply)
DELIMITER $$
DROP PROCEDURE IF EXISTS NewProc $$
CREATE DEFINER = CURRENT_USER PROCEDURE
`NewProc`
(
IN `PCountryId` binary(16),
IN `PCountryName` varchar(50),
IN `PCountryLongitude` float,
IN `PCountryLatitude` float
)
BEGIN
INSERT INTO
country
(
CountryId,
CountryName,
CountryLongitude,
CountryLatitude
)
VALUES
(
PCountryId,
PCountryName,
PCountryLongitude,
PCountryLatitude
);
END $$
DELIMITER ;
I am trying to use a if statement in my stored mySQL procedure, but when I try to create it in mySQL workbench I get this error ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database'.'table' WHERE date=dateIn;.
Here is the code:
DELIMITER $$
CREATE DEFINER=`rates_d_db` PROCEDURE `byDate`(in dateIn VARCHAR(255),in action VARCHAR(255))
BEGIN
IF action = "edit" THEN EDIT `database`.`table` WHERE date=dateIn;
ELSE SELECT * FROM `database`.`table` WHERE date=dateIn;
END IF;
END$$
I am new to stored procedures, so it's probably a very noob mistake.
Thanx in advance!
date is a reserved word in mySQL. You will have to wrap that in backticks as well.
Here is correct version of your procedure
DELIMITER $$
CREATE DEFINER=`rates_d_db` PROCEDURE `byDatee`(in dateIn VARCHAR(255),in action VARCHAR(255))
BEGIN
IF action = "edit" THEN
-- I used select below as i don't know what you want in edit either alter table or update table
SELECT * FROM `database`.`table` WHERE date=dateIn;
ELSE
SELECT * FROM `database`.`table` WHERE date=dateIn;
END IF;
END $$