0

機能するストアド プロシージャがありますが、ハイフンを含む値を渡すとエラーになります。

call create('server-v01',555); のような値でプロシージャを呼び出します。次のエラーが表示されます。

エラー 1064 (42000): SQL 構文にエラーがあります。1行目の「-v01」付近で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

私の手順は次のとおりです。

DELIMITER $$
CREATE PROCEDURE ct(tname varchar(20), sessionsnum INT(11))
BEGIN
DECLARE maxnum INT;
SET @s = CONCAT('INSERT INTO sessions_poll (server_name,sessions_num)                VALUES(''',tname,''',',sessionsnum,')');
PREPARE stm FROM @s;
EXECUTE stm;
SET @s = CONCAT('DROP TABLE IF EXISTS ', tname);
PREPARE stm FROM @s;
EXECUTE stm;
SET @s = CONCAT('CREATE TABLE ', tname, ' (num INT, max INT)');
PREPARE stm FROM @s;
EXECUTE stm;
SELECT @maxnum:=max(sessions_num) INTO maxnum FROM sessions_poll WHERE server_name=tname AND DATE(ts)=CURDATE();
SET @s = CONCAT('INSERT INTO ', tname, ' (num,max) VALUES (', sessionsnum,',',maxnum,')');
PREPARE stm FROM @s;
EXECUTE stm;
END $$
DELIMITER ;

私の質問は、ハイフンを含む変数をどのように処理できますか?

4

1 に答える 1

2

あなたの質問は、ダッシュで変数を処理する方法ではなく、ダッシュでテーブルを処理する方法です。プロシージャは、 で指定された名前のテーブルを作成しようとしますtname。このようなテーブルを作成 (またはドロップ) するには、バックティックで引用する必要があります。

DROP TABLE IF EXISTS `server-01`;

特に、あなたがする必要があります

SET @s = CONCAT('DROP TABLE IF EXISTS `', tname, '`');

他のインスタンスについても同様です。

これがあなたが本当にやりたいことかどうかは問題ですが;-)

于 2012-11-30T22:45:00.567 に答える