0

私はこのSQLコードをfirebirdに持っていて、とてもうまくいきます

set term !! ;

EXECUTE BLOCK AS
declare variable vtable_name VARCHAR(31);
BEGIN
for select table_name from mytables into :vtable_name
execute statement 'DROP TABLE ' || :vtable_name || ';';
END!!

set term ; !!

今、私はMysqlデータベースで非常によく似たものをやろうとしています. mysql のマニュアルを読んで、LOOP ステートメントと WHILE ステートメントについて読みました。

これは私のmysqlコードですが、機能しません

WHILE (SET @vtable_name  = (select table_name from mytables))
DO
  BEGIN
   DROP TABLE @vtable_name;
  END;
END WHILE;
4

1 に答える 1

1

あなたの問題は、「(select table_name from mytables)」ステートメントが結果セットを返し、結果セット全体を変数に割り当てることです。2 つ目の問題は、DROP / SELECT ステートメントで動的なテーブル名 / 列名が許可されないことです。

動的 SQL を使用できます。デモを参照してください: http://sqlfiddle.com/#!2/cf278/1

mysql sprocでテーブル名に変数を使用します

于 2013-02-10T07:35:06.140 に答える