Error on Creating Stored Function in MySQL 5.0.5 - mysql

I'm usually working with mssql or postgres, but I need to use MySql in the current project.
Now I have a problem with creating a stored function in MySQL 5.0.5.
I'm getting the following 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 '' at line 4
My Code looks like that:
CREATE FUNCTION aip_sf_choice_valid (request_id INT)
RETURNS INT
BEGIN
DECLARE sf_result INT;
SET sf_result = 1;
RETURN sf_result
END
I'm really out of ideas. I'm glad for any help!

You need to change the default delimiter from ';' within the SP body. More info on that here: http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html
Try this:
DELIMITER $$
CREATE FUNCTION aip_sf_choice_valid (request_id INT)
RETURNS INT
BEGIN
DECLARE sf_result INT;
SET sf_result = 1;
RETURN sf_result;
END

Should it have a semicolon after "END"?

Related

Returning Error in a Dynamic MySql Procedure

I am developing some functions/procedures for a much larger system, that is gona be used in others tables, so i tried to create a Dynamic MySql Procedure, to pass the name of the tables by variables,and get an "InOut" variable to return the result that i want, but it is returning me some Syntax error, i don't know where i am geting wrong in the code, so if someone knows a way better to do it, or get where the error is, i will be very thankfull!
Here is The Error that is returning:
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 'If Exists (Select cliente26 From da26s9 Where da26s9.c' at line 1.
Here is how i am Calling the Procedure:
Call FilTabMes('da26s9','codigo26','cliente26','002715',#string);
Here is The Procedure that i am struggling with:
CREATE PROCEDURE `FilTabMes`(vTabMes_ Char(32),vCodMes_ Char(32),vCodTab_ Char(32),vComFin_ Integer,InOut vResPes_ Char(32))
Begin
Declare vSelTab VarChar(1000);
Set #vSelTab = CONCAT('Select ',vCodTab_,' From ',vTabMes_,'
Where ',vTabMes_,'.',vCodMes_," Like ",vComFin_);
Set #vSelTab = CONCAT('If Exists(',#vSelTab,')
Begin
Set vResPes_ = "T";
End
Else
Begin
Set vResPes_ = "F";
End
End If');
Prepare stmt1 From #vSelTab;
Execute stmt1;
End

MySQL Function use provided variables throws error

I want to create a function for calculating the distance between points.
The calculation is going as expected, but i receive an error here:
DROP FUNCTION IF EXISTS CalculateDistance;
CREATE FUNCTION CalculateDistance(breite double, laenge double) RETURNS INT READS SQL DATA
BEGIN
DECLARE breite DOUBLE;
SET #ibk_laenge = breite;
CREATE FUNCTION CalculateDistance(breite double, laenge double) RETURNS INT READS SQL DATA
BEGIN
DECLARE breite DOUBLE
MySQL meldet: Dokumentation
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 5
What's wrong with that?
You need to change the delimiter first:
delimiter //
CREATE FUNCTION CalculateDistance ...
END //
delimiter ;
Otherwise the function definition stops at the first ; which would make it incomplete.

Loop syntax error in MySQL cursor

I have been trying to use a cursor and following a tutorial I found online, I was able to come up with the following cursor.
DELIMITER $$
CREATE PROCEDURE customers_with_oldest_version (INOUT customerCount varchar(4000))
BEGIN
DEClARE customers_with_oldest_version CURSOR FOR
select * from CustomerSoftware where software in (select min(minimumSoftware) from ProductSoftware);
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET #finished = 1;
set #row_entry = "";
open customers_with_oldest_version;
get_customers: LOOP
FETCH customers_with_oldest_version INTO #row_entry;
IF #finished = 1 THEN
LEAVE get_customers;
END IF;
SET #customerCount = #customerCount + 1;
END LOOP;
CLOSE customers_with_oldest_version;
END$$
DELIMITER ;
But I am unable to create this procedure, since phpmyadmin is giving me an error saying that
#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 '#row_entry; IF #finished = 1 THEN LEAVE get_customers; END IF; SET #c' at line 16
What am I missing here?
You can't fetch into a user-defined variable. This is a bug that has been around for many years, see https://bugs.mysql.com/bug.php?id=2261
Declare a regular local variable for it.

Trouble creating a function in MySQL

I'm used to working in MS SQL Server, so MySQL is always a little bit foreign to me. I wrote the following for MS SQL Server, and I'm trying to port it to MySQL:
CREATE FUNCTION ToRadians
(#Degrees float)
RETURNS float
AS
BEGIN
DECLARE #Radians float
SELECT #Radians = #Degrees * 3.1415927 / 180
RETURN #Radians
END
GO
I've got
CREATE FUNCTION ToRadians
(#Degrees float)
RETURNS float
BEGIN
DECLARE #Radians float;
SELECT #Radians = #Degrees * 3.1415927 / 180;
RETURN #Radians;
END
but in PHPMyAdmin, that gives me the error:
Error
SQL query:
CREATE FUNCTION ToRadians(
#Degrees float
) RETURNS float AS BEGIN DECLARE#Radians float;
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 '#Degrees float)
RETURNS float
AS
BEGIN
DECLARE #Radians float' at line 2
The searching I've done indicates that the above MySQL UDF should be correct, but it obviously isn't. SELECT version() returns 5.0.77
CREATE FUNCTION ToRadians (in_degrees FLOAT) RETURNS FLOAT
DETERMINISTIC
BEGIN
RETURN in_degrees * 3.1415927 / 180;
END;
DETERMINISTIC because the return for a given value of degrees should always be the same in radians.
Also DEGREES() and RADIANS() functions already exist in mysql.
RADIANS()
Don't use # in MySQL variable names, it creates a local session variable.
You probably need to change standart delimiter which is semicolon to another character, for instance // :
DELIMITER // before your function definition, then // just after function, then switch delimiter back to semicolon (DELIMITER ;)

MySQL 5.1.39 SQL syntax error

I have made an upgrade for my MySQL Server to 5.1.39 and now when I run SQL scripts (which had worked previously) - it throws error. I have checked syntax many times and I couldn't find any incompatible code parts. Please suggest any solution for this problem.
Error message
Mysql::Error: 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 'CREATE FUNCTION clean_dymmy_table (dummy_name VARCHAR(255)) RETURNS V' at line 3:
SQL code:
/*DELIMITER //*/
DROP FUNCTION IF EXISTS clean_dymmy_table;
CREATE FUNCTION clean_dymmy_table (dummy_name VARCHAR(255)) RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
DECLARE temp_val VARCHAR(255);
SET temp_val = dummy_name;
-- Test
SET temp_val = REPLACE(temp_val, 'Tmp ', '');
SET temp_val = REPLACE(temp_val, ' TmP', '');
SET temp_val = REPLACE(temp_val, 'TMP ', '');
SET temp_val = REPLACE(temp_val, ' TMP', '');
SET temp_val = REPLACE(temp_val, ' tmp', '');
RETURN dummy_name;
END/*//*/
Not sure why you removed the DELIMITER part, but when I add that back in, it runs fine:
DELIMITER // -- you have to change what MySQL expects between commands
DROP FUNCTION IF EXISTS clean_dymmy_table // -- tell it a new command's coming
CREATE FUNCTION clean_dymmy_table (dummy_name VARCHAR(255))
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
-- now this can be parsed as part of the current command.
DECLARE temp_val VARCHAR(255);
SET temp_val = dummy_name;
-- Test
RETURN dummy_name;
END
// -- Now you're done with that command.
-- go back to semi-colons, because otherwise life is too zany for me.
DELIMITER ;
(This was in 5.1.54... but I don't think that should matter)
A hunch: There seems to be a MySQL Bug in the 5.1.x line pertaining to DELIMITER that may be biting you here:
#46429 use DELIMITER command in MySql.Data.MySqlClient.MySqlScript
Though that heavily depends on how you're calling it, given cwallenpoole's response, your symptom does suggest it may well be that bug, given your MySQL version. Is upgrading a possibility for you?