別のデータベースのデータベース名を保持するテーブルのすべての行を循環させようとしています。これは私がコンパイルするものですが、MySQLは内容ではなく実際のデータベース名として 'データベース'ビットを取るため動作しません。変数を使用してSELECTステートメントで別のデータベースを参照する
変数の内容を取得するために次のように変更するにはどうすればよいですか?
DROP PROCEDURE IF EXISTS CYCLE;
DELIMITER ;;
CREATE PROCEDURE CYCLE()
BEGIN
DECLARE data_name CHAR(255);
DECLARE done INT DEFAULT FALSE;
DECLARE cursor_i CURSOR FOR SELECT database FROM company;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cursor_i;
read_loop: LOOP
FETCH cursor_i INTO database;
IF done THEN
LEAVE read_loop;
END IF;
SELECT * FROM database.table LIMIT 1;
END LOOP;
CLOSE cursor_i;
END;
;;
DELIMITER ;
更新:明確に私は 'データベース'が予約語であることを知っています。私はここで、私が使った実際の変数名の代わりに使っています。
[9.2.1識別子修飾子](https://dev.mysql.com/doc/refman/5.7/en/identifier-qualifiers.html)、[9.3キーワードと予約語句](https: /dev.mysql.com/doc/refman/5.7/en/keywords.html)および[13.5 SQL文の準備](https://dev.mysql.com/doc/refman/5.7/en/sql-syntax- prepared-statements.html)。 – wchiquito
これがどのように役立つか分かりませんか?識別子修飾子は、変数の使用について言及しません。準備された声明のガイドに同意してください。私は「データベース」は予約語ですが、それは一例です。投稿する前に私はすでに文書を読んでいました。 – williamsdb