存储过程-尝试获取字段大小

时间:2018-10-31 17:02:33

标签: mysql procedure

我从另一个SQL应用程序导入了一个巨大的数据库,并将其转换为MySQL。为了加快此过程,我创建了具有任意长度的文本字段。

我想修改每个表并使字段不超过其所需的大小。基于此站点,我提出了这两个过程

    DROP PROCEDURE getFieldMaxWidth;
DROP PROCEDURE modifyFieldMaxWidth;

DELIMITER $$
CREATE PROCEDURE getFieldMaxWidth(tab_name VARCHAR(40), fld_name VARCHAR(40), OUT value INT(11)) 
    BEGIN
        SET @t1:= CONCAT('SELECT MAX(LENGTH(',fld_name,')) FROM ',tab_name, ' INTO @value');
        PREPARE stmt3 FROM @t1;
        EXECUTE stmt3;
        DEALLOCATE PREPARE stmt3;
    END;

CREATE PROCEDURE modifyFieldMaxWidth(IN tab_name VARCHAR(40), IN fld_name VARCHAR(40))
    BEGIN
        SET @t1:=256;
        CALL getFieldMaxWidth(tab_name, fld_name, @t1);
        SET @t2:=CONCAT('ALTER TABLE ',tab_name,' CHANGE ',fld_name,' ',fld_name,' VARCHAR(',@t1,')');
        PREPARE stmt4 FROM @t2;
        EXECUTE stmt4;
        DEALLOCATE PREPARE stmt4;
    END$$

我一直回想的是此错误消息:

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 'NULL' at line 1

哪个州

  

错误地使用保留字

有人可以在这里帮助我吗?不确定mySQL认为我使用的保留字不正确?

0 个答案:

没有答案