質問

私は、MySQLデータベースにおよびセッション変数を使用せずに、動的SQLステートメントを使用することができますどのように?

今、私は(MySQLのストアドプロシージャで)このようなコードがあります:

(...)
DECLARE TableName VARCHAR(32);
SET @SelectedId = NULL;
SET @s := CONCAT("SELECT Id INTO @SelectedId FROM ", TableName, " WHERE param=val LIMIT 1");
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
IF ISNULL(@SelectedId) THEN 
(...)

しかし、私は私は、この手順を開始したいことを意味し、ローカル変数のみを使用したいと思います:

DECLARE TableName VARCHAR(32);
DECLARE s VARCHAR(1024);
DECLARE SelectedId INTEGER UNSIGNED;
(...)

とどこでもCHAR @は使用しないでください。これを実行する方法はありますか?

役に立ちましたか?

解決

申し訳ありませんが、MySQLで準備された文は、セッション・グローバルです。 //dev.mysql: HTTPによります。 COM / DOC / refman / 5.1 / / EN-SQL構文準備-statements.html に、 "準備されたステートメントは、セッションに対してグローバルです。"

とMySQL 5.xでの動的SQLを実行するために(準備された文のほかに)他に方法はありません

あなたは、もちろん上記の「@s」を置き換えることができますが、私の知る限り、あなたは@SelectedIdで立ち往生しているので。

MySQLの6.xでは、動的SQLを実行します「EXECUTE IMMEDIATE」ステートメントを追加します、計画機能があります。 http://forge.mysql.com/worklog/task.php?idを参照してください。 = 2793 のます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top