ローカル変数とダイナミックのMySQL
-
16-09-2019 - |
質問
私は、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 のます。
所属していません StackOverflow