저는 여러 테이블에서 많은 데이터를 검토하고 분석하는 저장 함수가 있습니다. 대부분의 테이블은 정적이지만 커서를 데이터 위에 반복하도록 선언 할 수 있습니다. 미리 알려지지 않은 테이블, 특히 언어 집합 테이블 (예 : language_en
, 등)이 있습니다. 즉, 저장된 함수가 쓰여졌을 때, 나는이 테이블 중 어느 테이블이 존재하는지 알지 못한다.저장 프로 시저 내에서 준비된 문의 쿼리 결과를 반복하십시오.
저장된 함수 자체에서, 나는이 작업을 수행 할 수 있습니다
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