mySQL存储过程:传递给show过程的输入参数

时间:2013-05-02 08:25:30

标签: mysql stored-procedures

当我在控制台中测试此脚本时,它正在运行。

我的剧本:

show fields from testdata1970_05.loadlv_test where FIELD not like 'ID_test';

我的存储过程:

DELIMITER $$
DROP PROCEDURE IF EXISTS `testdata1970_05`.`list_testparameters` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `list_testparameters`(IN nametest varchar(24))
BEGIN
show fields from nametest where FIELD not like 'ID_test';
END $$
DELIMITER ;

但是,当我基于此脚本构建存储过程时,它不起作用。

执行存储过程:

call list_testparameters(loadlv_test);

错误:

ERROR 1054 (42S22): Unknown column 'loadlv_test' in 'field list'

请告知为什么这个acript在控制台中可以正常工作?

1 个答案:

答案 0 :(得分:1)

假设testdata1970_05是一个数据库,您需要动态生成SQL并执行它。

DELIMITER $$
DROP PROCEDURE IF EXISTS `testdata1970_05`.`list_testparameters` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `list_testparameters`(IN nametest varchar(24))
BEGIN
    SET @sql_text := CONCAT('show fields from ','`testdata1970_05`.`',@nametest,'` where FIELD not like ''ID_test''';
    PREPARE sqlstmt FROM @sql_text;
    EXECUTE sqlstmt;
END $$
DELIMITER ;