2016-11-20 17 views
-1

select everythingコマンドを実行するストアドプロシージャを作成しようとしています。そのため、常に入力する必要はありません。しかし、私が調達を呼び出すと、それは私に列エラーを与える。SQL - プロシージャの列エラー

DELIMITER $$ 
create procedure LIST(in tableName varchar(35)) 
    BEGIN 
     SELECT * FROM tableName ; 
    END$$ 

ERROR

mysql> CALL LIST(Customers); 
ERROR 1054 (42S22): Unknown column 'Customers' in 'field list' 
+1

は、パフォーマンスの低下のために作るための素晴らしい方法のような音。 – Drew

+0

@NirLevy、私はそうは思わない、それは顧客を記載してください参照してください。 – John

+0

@Drewは同意しましたが、なぜ今は好奇心が強いのですか? – John

答えて

2

任意の動的SQLは、MySQL Prepared Statementsを使用する必要があります。

DROP PROCEDURE IF EXISTS `LIST`; 
DELIMITER $$ 
create procedure LIST(in tableName varchar(35)) 
BEGIN 
    SET @sql=CONCAT('select * from ',tablename); 
    PREPARE stmt1 FROM @sql; 
    EXECUTE stmt1; 
    DEALLOCATE PREPARE stm1; 
END$$ 

テスト:

call LIST('course'); 
call LIST('tutor'); 
関連する問題