私はストアドファンクションを持っています。そのジョブは、いくつかのテーブルから多くのデータを分析して分析するものです。ほとんどのテーブルは静的であり、データをループするようにカーソルを宣言できますが、あらかじめわかっていないテーブル、具体的には言語セットテーブル(language_en
、language_fr
など)があります。関数が書かれているが、私はこれらのテーブルのどれが存在するのか分からない。保存された関数自体でストアドプロシージャ内で準備されたステートメントクエリの結果をループする
、私はこれを行うことができます。
declare cLang cursor for
SELECT table_name FROM information_schema.tables
WHERE table_schema=database() and table_name like 'language_%';
declare continue handler for not found set exit_loop = true;
open cLang;
set exit_loop = false;
cLang_loop: loop
fetch cLang into str;
...
end loop;
この方法で、私は、データベースに存在するすべての言語テーブルをループすることができます。それから、私はそれぞれのデータを取得し、分析を繰り返します。明らかに、どのテーブルがあるのかわからないので、それぞれのカーソルを宣言することはできません。しかし、私は準備された文を使用することができます:
fetch cLang into tableName;
set @stmt_text = concat("SELECT t_code, t_string FROM ", str);
prepare stmt from @stmt_text;
execute stmt using @scId;
しかし、今私はどのようにこのクエリの結果をループするのですか?
オプションは、[MariaDB/MySQLの:動的SQLのためのカーソル]を参照してください、動的カーソルことができます(https://falseisnotnull.wordpress.com/2013/01/08/mariadbmysql-cursors- for-dynamic-sql /)を使用します。 – wchiquito