不止mysql不能识别,oracle、db2一样都不能识别,印象里只有foxbase可以通过转义识别。
而在mysql、oracle、db2里就需要用动态sql
实现过程如下
DELIMITER $$
drop PROCEDURE `exe_select`$$
CREATE PROCEDURE `exe_select`(in tbl varchar(500),in col varchar(500))
begin
set @str = concat('select ', col, ' from ', tbl);
PREPARE stmt FROM @str;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
mysql> call exe_select('emp','empno');
+-------+
| empno |
+-------+
| 7369 |
| 7499 |
| 7521 |
| 7566 |
| 7654 |
| 7698 |
| 7782 |
| 7788 |
| 7839 |
| 7844 |
| 7876 |
| 7900 |
| 7902 |
| 7934 |
+-------+
14 rows in set (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
mysql> call exe_select('emp','empno,ename');
+-------+--------+
| empno | ename |
+-------+--------+
| 7369 | SMITH |
| 7499 | ALLEN |
| 7521 | WARD |
| 7566 | JONES |
| 7654 | MARTIN |
| 7698 | BLAKE |
| 7782 | CLARK |
| 7788 | SCOTT |
| 7839 | KING |
| 7844 | TURNER |
| 7876 | ADAMS |
| 7900 | JAMES |
| 7902 | FORD |
| 7934 | MILLER |
+-------+--------+
14 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)