3

MySQLデータベースでセッション変数を使用せずに動的SQLステートメントを使用するにはどうすればよいですか?

現在、私はそのようなコードを持っています(MySQLストアドプロシージャに):

(...)
DECLARE TableName VARCHAR(32);
SET @SelectedId = NULL;
SET @s:= CONCAT( "SELECT Id INTO @SelectedId FROM"、TableName、 "WHERE param = val LIMIT 1");
@sからstmtを準備します。
実行stmt;
DEALLOCATE PREPARE stmt;
IF ISNULL(@SelectedId)THEN
(...)

ただし、ローカル変数のみを使用したいので、この手順を次のように開始します。

DECLARE TableName VARCHAR(32);
DECLARE s VARCHAR(1024);
SelectedIdINTEGERUNSIGNEDを宣言します。
(...)

@charはどこにも使用しないでください。これを行う方法はありますか?

4

2 に答える 2

2

申し訳ありませんが、MySQL のプリペアド ステートメントはセッション グローバルです。http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.htmlによると、「準備済みステートメントもセッションに対してグローバルです。」

また、MySQL 5.x で動的 SQL を実行する方法は (プリペアド ステートメント以外に) ありません。

したがって、もちろん上記の「@s」を置き換えることができますが、私の知る限り、@SelectedId にこだわっています。

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

于 2009-09-25T15:54:39.253 に答える