2016-10-10 3 views
0

テーブル名のみの動的ストアドプロシージャを作成しようとしています。テーブル名を指定してストアドプロシージャを呼び出すと、指定されたテーブル名のすべての詳細を表示する必要があります。テーブル名のみでmysqlの動的ストアドプロシージャを作成する

私はこのコードを使用しています: - それはエラーを表示

CREATE PROCEDURE `test1`(IN tab_name VARCHAR(40)) 
BEGIN 
SET @t1 =CONCAT("SELECT * FROM '",tab_name,"' "); 
PREPARE stmt3 FROM @t1; 
EXECUTE stmt3; 
DEALLOCATE PREPARE stmt3; 
END 

、およびエラーがある: -

MySQLは言った:ドキュメント

1064 - あなたはあなたの中にエラーが発生していますSQL構文。あなたのMySQLサーバーのバージョンに対応するマニュアルをチェックして、正しい構文を使用して ''の近くの ''で使用してください。

いずれかが助けてくれます。

答えて

1

バックティックサラウンドテーブル名。

DROP PROCEDURE IF EXISTS `test1`; 
DELIMITER $$ 
CREATE PROCEDURE `test1`(IN tab_name VARCHAR(40)) 
BEGIN 
    SET @t1 =CONCAT("SELECT * FROM `",tab_name,"`"); -- back-ticks around tbl name 
    PREPARE stmt3 FROM @t1; 
    EXECUTE stmt3; 
    DEALLOCATE PREPARE stmt3; 
END$$ 
DELIMITER ; 

または(PHPMyAdminのか、区切り文字を必要としないもの)は:

DROP PROCEDURE IF EXISTS `test1`; 
CREATE PROCEDURE `test1`(IN tab_name VARCHAR(40)) 
BEGIN 
    SET @t1 =CONCAT("SELECT * FROM `",tab_name,"`"); -- back-ticks around tbl name 
    PREPARE stmt3 FROM @t1; 
    EXECUTE stmt3; 
    DEALLOCATE PREPARE stmt3; 
END 

がうまくいけば、あなたはそれは些細なようで、ちょうどselectを呼び出すよりも遅くなりますので、このストアドプロシージャと異なる何かをしようとしています。

+0

ありがとうDrew 私はあなたから与えられたいくつかのコードを変更していますが、正しく動作しています。 助けをもう一度お返事します 私は使用しています CREATE PROCEDURE 'test1'(' 'tab_name'' VARCHAR(40)の中で)NOT DETERMINISTIC NO SQL SQLセキュリティディフェンターBEGIN SET @ t1 = CONCAT(" SELECT * FROM '"、tab_name、 ''); @ t1からstmt3を準備する; EXECUTE stmt3; DEALLOCATE PREPARE stmt3; END –

+0

クール。それを聞いてうれしいKunwar。 – Drew

+0

ええ、上記の意味を知っています。コメントに間違った表記が表示されます。それを表示するには、エスケープシーケンスのようにする必要があります。しかし、ええ、バックティック。 – Drew

関連する問題