sql 运行 查询自程序

sql run querys since procedures

我尝试查询,因为 mysql

中有一个过程

我关注了以下内容:

DELIMITER #

CREATE PROCEDURE returndata(IN xtable CHAR(255), IN xcolumn CHAR(255))
    BEGIN
        IF (xcolumn = 'XALL') THEN
            SELECT * FROM xtable;
        ELSE
            SELECT xcolumn FROM xtable;
        END IF;
    END;
#

DELIMITER ;

但是报错。任何帮助都是可以接受的,或者我会说这是否可能?

EDIT 错误调用过程:

MariaDB [pruebab]> CALL returndata('test', 'id');
ERROR 1146 (42S02): Table 'pruebab.xtable' doesn't exist

您不能像这样将 table 名称作为参数传递。您需要将变量连接成 SQL 字符串才能使用它们。看到这个答案。

Mysql stored procedure don't take table name as parameter

变量仅在查询的表达式中计算,而不是在需要列或 table 名称的地方。您需要使用准备好的查询。

CREATE PROCEDURE returndata(IN xtable CHAR(255), IN xcolumn CHAR(255))
    BEGIN
        IF (xcolumn = 'XALL') THEN
            SET @SQL = CONCAT('SELECT * FROM ', xtable);
        ELSE
            SET @SQL = CONCAT('SELECT ', xcolumn, ' FROM ', xtable);
        END IF;
        PREPARE stmt FROM @SQL;
        EXECUTE stmt;
    END;