gpt4 book ai didi

mysql - 调试mysql sproc, 'NULL'附近语法正确

转载 作者:行者123 更新时间:2023-11-29 10:25:19 25 4
gpt4 key购买 nike

我编写了一个存储过程,它将在向表中插入新记录时触发。

调用时会返回错误 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 'NULL' at line 1'

我遇到的问题是我无法调试内部查询来找出“NULL”在哪里。或者为什么它会出现。

如果有人能建议我如何调试这个,或者发现我的代码出了什么问题,我将不胜感激。注意:我不相信我可以在存储过程之外测试动态查询。

DROP PROCEDURE IF EXISTS SetUniqueCodeCustomLength;

DELIMITER $$
CREATE PROCEDURE SetUniqueCodeCustomLength (
IN TableName VARCHAR(255),
IN FieldName VARCHAR(255),
IN PKName VARCHAR(250),
IN PKID INT,
IN CodeLength INT)
BEGIN

SET @pass = '';
SET @loop = 0;
SET @matchCount = 1;
SET @sSQL = '';

WHILE @matchCount > 0 DO

SET @loop = 0;
WHILE @loop < CodeLength DO
-- random number from x-uy
SET @chr = SUBSTRING('abcdefghjkpqrstuvwxyz23456789', CAST( ROUND(RAND()*(29-1)+1) AS INT), 1);
SET @pass = @pass + @chr;
SET @loop = @loop + 1;
END WHILE;

-- Check for unique-ness.
SET @sSQL = CONCAT('SELECT COUNT(*) INTO @matchCount FROM ' + @TableName + ' WHERE ' + @FieldName + ' = ''' + @pass + '''');
PREPARE stmt FROM @sSQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END WHILE;


SELECT @pass;
-- perform the update
SET @sSQL = CONCAT('UPDATE ' + @TableName + ' SET ' + @FieldName + ' = ''' + @pass + ''' WHERE ' + @PKName + ' = ' + @PKID);
PREPARE stmt FROM @sSQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;

调用方式:

CALL SetUniqueCodeCustomLength('Posts', 'PostCode', 'PostID', 7, 6);

最佳答案

一些观察:

mysql> DROP PROCEDURE IF EXISTS `SetUniqueCodeCustomLength`;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> DELIMITER $$

mysql> CREATE PROCEDURE `SetUniqueCodeCustomLength` (
-> IN `TableName` VARCHAR(255)
-> )
-> BEGIN
-> SET @`sSQL` := CONCAT('SELECT ', @`TableName`); -- NULL
-> SELECT @`sSQL`;
->
-> SET @`sSQL` := CONCAT('SELECT ', `TableName`); -- SELECT Posts
-> SELECT @`sSQL`;
-> END$$
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;

mysql> CALL `SetUniqueCodeCustomLength`('Posts');
+---------+
| @`sSQL` |
+---------+
| NULL |
+---------+
1 row in set (0.00 sec)

+--------------+
| @`sSQL` |
+--------------+
| SELECT Posts |
+--------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

关于mysql - 调试mysql sproc, 'NULL'附近语法正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48426366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com