What is the matter with if statement in procedure? - mysql

It is simple to write a sql procedure.
demiliter //
create procedure show_growth()
begin
SELECT * from tb;
end //
I want to add a if statement in the procedure.
Drop it first.
drop procedure show_growth //
Then create a new one.
create procedure show_growth(in type char(3))
-> begin
-> if type = "all" then
-> SELECT * from tb;
-> endif
-> end //
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'end' at line 6
How to fix it?

endif is not 1 word.
begin
if type = "all" then
SELECT * from tb;
end if;
end

Related

MariaDB syntax error when using IF statements

I'm trying to create a stored procedure in MariaDB using the code below.
DELIMITER //
CREATE PROCEDURE P5();
BEGIN
IF 1=1 THEN
SELECT 1;
END IF;
END//
When I run the code, I receive a syntax error
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ';
BEGIN
IF 1=1 THEN
SELECT 1;
END IF;
END' at line 1
I realise that I could use an IF () function in this case, but I need to be able to use IF statements.
No need of adding semicolon after procedure name.
DELIMITER //
CREATE PROCEDURE P5()
BEGIN
IF 1=1 THEN
SELECT 1;
END IF;
END//
Check db fiddle
Refer: MySQL Docs

Creat procedure in mysql

I was learning sql from w3schools.Here is given simple mysql procedure but somehow I couldn't to write down this procedure I'm new in sql please could you provide me with feedback.
DELIMITER //
CREATE PROCEDURE getAllAgents
BEGIN
SELECT
* FROM agents
END //
DELIMITER ;
When I try to execute this procedure I'm keep going to get following error
Error Code: 1064 You have an error in your SQL syntax; check the
manual that corresponds to your MariaDB server version for the right
syntax to use near 'begin select * from agents end' at line 2
Try bellow
DELIMITER //
CREATE PROCEDURE SelectAllCustomers
BEGIN
SELECT * FROM Customers
END //
DELIMITER ;
call SelectAllCustomers
if you use mariyaDB
CREATE procedure selectAllCustomers()
SELECT * FROM customer
to execute
call selectAllCustomers

MySql Trigger Syntax Error 1064 Empty Single Quotes

I am trying to execute trigger statement in MySql 5.1.41 but i am getting an error which is beyond my comprehension. Any help will be appreciated.
Following is the trigger code:
create TRIGGER populate_modality_trigger AFTER INSERT on series
FOR EACH ROW BEGIN
DECLARE x int;
select count(*) into x from lu_modality_alias l WHERE l.modality=NEW.modality;
IF (x =0 OR x is NULL) THEN
INSERT INTO lu_modality_alias
set modality = NEW.modality,
modality_alias = NEW.modality
;
END if;
end;
When I run above code, I get following error:
MySQL said: Documentation #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
The interesting thing is that when i execute the same code from Naviacat query editor, it runs successfully and trigger is created.
But the same fails from phpMyAdmin sql.
You need to change the delimiter character so the MySql parser doesn't end the CREATE statement parsing at the first semi-colon
delimiter //
create TRIGGER populate_modality_trigger AFTER INSERT on series
FOR EACH ROW BEGIN
DECLARE x int;
select count(*) into x from lu_modality_alias l WHERE l.modality=NEW.modality;
IF (x =0 OR x is NULL) THEN
INSERT INTO lu_modality_alias
set modality = NEW.modality,
modality_alias = NEW.modality
;
END if;
end //
delimiter ;

mysql : What is wrong with my stored procedure?

Its my first time to learn stored procedure. I have here below :
DELIMETER //
DROP PROCEDURE IF EXISTS RepeatTomProc //
CREATE PROCEDURE RepeatTomProc()
BEGIN
DECLARE x INTEGER;
SET x = 1;
REPEAT
INSERT INTO TOM VALUES(x);
SET x = x + 1;
UNTIL x > 100
END REPEAT;
END //
DELIMITER;
What I Want to happen is that when the loop is not yet done it will insert the x value into the table TOM.
As for now the table TOM is empty.
for the table :
CREATE TABLE TOM (
TOM_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (TOM_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
My problem is when I try to create the stored procedure by copying and pasting the code in my mysql terminal I have the following error :
mysql> DELIMETER $$
-> DROP PROCEDURE IF EXISTS RepeatTomProc $$
-> CREATE PROCEDURE RepeatTomProc()
-> BEGIN
-> DECLARE x INT;
ERROR 1064 (42000): 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 'DELIMETER $$
DROP PROCEDURE IF EXISTS RepeatTomProc $$
CREATE PROCEDURE RepeatTo' at line 1
mysql> SET x = 1;
ERROR 1193 (HY000): Unknown system variable 'x'
mysql> REPEAT
->
Display all 748 possibilities? (y or n)
? DESC ITERATE ORD
// It displays lots of other possibilities which I have ommitted
-> = x + 1;
ERROR 1064 (42000): 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 'REPEAT
= x + 1' at line 1
mysql> UNTIL x > 100
-> END REPEAT;
ERROR 1064 (42000): 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 'UNTIL x > 100
END REPEAT' at line 1
mysql> END $$
-> DELIMITER;
I have based my codes from : Loop in Stored Procedures
You mistyped DELIMITER
try this
DELIMITER //
DROP PROCEDURE IF EXISTS RepeatTomProc //
CREATE PROCEDURE RepeatTomProc()
BEGIN
DECLARE x INTEGER;
SET x = 1;
REPEAT
INSERT INTO TOM VALUES(x);
SET x = x + 1;
UNTIL x > 100
END REPEAT;
END //
DELIMITER ;
Also you need space between DELIMITER and ; in the end

error while creating mysql procedure having SYS_REFCURSOR as out param

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.