MySQL Stored Procedure with Prepared Statement does not work - mysql

I have the following stored procedure:
CREATE PROCEDURE getLastValueAutomaticShelter(IN fieldName varchar(30), position_number INT)
BEGIN
SET #query = CONCAT('SELECT * FROM automatic_changes WHERE',fieldName,'IS NOT NULL AND P_id=?');
PREPARE stmt FROM #query;
SET #position_number=position_number;
EXECUTE stmt USING #position_number;
DEALLOCATE PREPARE stmt;
END
Then I am running it:
mysql> call getLastValueAutomaticShelter('current_level', 500)//
And getting the following error:
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 'NOT N
ULL AND P_id=?' at line 1
Any ideas? Thanks.

You need to add some spaces in there:
SET #query = CONCAT('SELECT * FROM automatic_changes WHERE ',fieldName,' IS NOT NULL AND P_id=?');
/* right ^ here....and ^ here*/
Otherwise your final query might look like this:
SELECT * FROM automatic_changes WHEREcolumnameIS NOT NULL AND P_id='whatever';
You get the idea :)

Related

mysql prepared statement unable to execute. Getting error 1064 in prepared statement

Query is retrieving correct result but in Prepared statement getting error "Error Code: 1064. check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO audittrail(BATCHID,IPADDRESS,DATE,LINENAME,ACTION) values (1165' at line 2"
Thanks in advance:-)
CREATE DEFINER = 'root'#'localhost'
PROCEDURE new_procedure()
BEGIN
DECLARE stmt text;
SET #stmt = (SELECT CONCAT('START TRANSACTION; \n', GROUP_CONCAT(objdata SEPARATOR ';\n'),';\nCOMMIT; \n DELETE FROM qry_obj_dtl where id in (',GROUP_CONCAT(ID SEPARATOR','),');') AS objData1 FROM qry_obj_dtl);
SELECT #stmt;
PREPARE param_stmt FROM #stmt;
EXECUTE param_stmt;
DEALLOCATE PREPARE param_stmt;
END

UPDATE Stored Procedure in Mysql

I have written following Mysql stored procedure with 2 input parameters (ids and tags)
SET #sql = Concat('UPDATE tbl_Members SET TagId=CONCAT(TagId,''',tags,''') WHERE MemberID IN (',ids,')');PREPARE stmt FROM #sql;EXECUTE Stmt;
When I try to execute that it throws the following error
The following query has failed: "CREATE DEFINER=`0zrt`#`localhost` PROCEDURE `update_member_tag`(IN `ids` VARCHAR(255), IN `tags` VARCHAR(255)) NOT DETERMINISTIC MODIFIES SQL DATA SQL SECURITY DEFINER SET #sql = CONCAT('UPDATE tbl_Members SET TagId=CONCAT(TagId,''',tags,''') WHERE MemberID IN (',ids,')'); PREPARE stmt FROM #sql; EXECUTE stmt;"
MySQL said: #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 'PREPARE stmt FROM #sql; EXECUTE stmt' at line 2

I want to get null count of dyanmic column name

CREATE PROCEDURE ts(IN col1 varchar(100),IN val int, OUT res int)
BEGIN
SET #s=CONCAT("SELECT ISNULL(NULLIF(",col1,",'')) INTO #res FROM demo WHERE d=",val);
PREPARE stmt1 FROM #s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
SELECT #res INTO res;
END
i get following 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 '' at line 4
i want to used this stored procedure in PHP??? please help!!
ISNULL is not SQL92, try:
sum(case when field is null then 1 else 0 end)
for better portability

allocated prepared query error syntax error

I try to execute a variable query within a custom mysql function, here's the script :
DELIMITER $
CREATE FUNCTION is_present(in_id BIGINT, in_table_name VARCHAR(255)) RETURNS BIT
BEGIN
DECLARE stm VARCHAR(255);
DECLARE result BIT DEFAULT 0;
SET stm := CONCAT('SELECT IF(COUNT(*), 1, 0) INTO result FROM', in_table_name, 'WHERE id=? LIMIT 1');
PREPARE query FROM stm;
EXECUTE query USING in_id;
DEALLOCATE PREPARE query;
RETURN result;
END $
DELIMITER ;
Mysql warns me about the syntax :
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 'stm; EXECUTE query USING in_id; DEALLOCATE PREPARE query;
RETURN result; ' at line 9
I think you are missing a semicolon before var name:
PREPARE query FROM :stm;

MySQL how do you make a prepare statement with a variable?

This is the stored procedure I'm trying to use
DELIMITER ##
CREATE PROCEDURE exportFile()
BEGIN
DECLARE filename VARCHAR(255);
SET filename = CONCAT('~/Sample',NOW(),'.csv'));
SET #outfilestmt = concat('SELECT * INTO OUTFILE ',"'", filename,"'",' FROM Results') ;
PREPARE stmt FROM #outfilestmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END ##
DELIMITER ;
This is the error I get
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 ');
SET #outfilestmt = concat('SELECT * INTO OUTFILE ',"'", filename,"'",' FROM R' at line 6
Desired Result:
call exportFile
--~/Sample2012-03-14-10:42:51.cvs
call exportFile
--~/Sample2012-03-14-10:42:52.cvs
call exportFile
--~/Sample2012-03-14-10:42:53.cvs
A semicolon is missing after
SET filename = CONCAT('~/Sample',NOW(),'.csv'))
and one brace is too much (also noted by Devart. Thanks). Change it to
SET filename = CONCAT('~/Sample',NOW(),'.csv');
Tested it to be sure. Works!