1
我有一個存儲函數,它的工作是通過並分析來自多個表的大量數據。儘管大多數表格都是靜態的 - 而且我可以聲明光標以循環數據 - 但有一些表格不提前知道,具體而言,語言集合表格(例如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-對於動態-SQL /)。 – wchiquito