根據劉若英的建議下,我寫了一個存儲過程,輸出數值的例子,從各列在每個表中。這是醜陋而緩慢的,但它的工作原理。我很歡迎有關如何改進此代碼的建議。
DELIMITER //
CREATE PROCEDURE column_example_values(
IN db_name VARCHAR(64),
IN tbl VARCHAR(64),
IN col VARCHAR(64),
OUT result MEDIUMTEXT)
BEGIN
SET @s = CONCAT('SELECT GROUP_CONCAT(tbl1.',col,
' separator \',\') FROM (SELECT DISTINCT ',
col,' FROM ',db_name,'.',tbl,
' LIMIT 100) tbl1 INTO @result1');
PREPARE stmt FROM @s;
EXECUTE stmt;
SET result = IFNULL(@result1,'');
END;
//
DELIMITER ;
DELIMITER //
CREATE PROCEDURE all_columns_example_values(IN db_name VARCHAR(64))
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE tbl, col VARCHAR(64);
DECLARE cur1 CURSOR FOR
SELECT
table_name,
column_name
FROM
information_schema.columns
WHERE
table_schema = db_name
ORDER BY
table_name,
column_name;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
CREATE TEMPORARY TABLE results (
tbl VARCHAR(64), col VARCHAR(64), examples MEDIUMTEXT);
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO tbl, col;
IF done THEN
LEAVE read_loop;
END IF;
CALL column_example_values(db_name,tbl,col,@result);
INSERT INTO results (tbl, col, examples) VALUES (tbl, col, @result);
END LOOP;
CLOSE cur1;
SELECT * FROM results;
DROP TABLE results;
END;
//
DELIMITER ;
它可以與
CALL all_columns_example_values('mydb');
來源
2013-06-01 15:13:19
Sam
被稱爲是[這](http://stackoverflow.com/questions/190776/how-to-have-dynamic-sql-in-mysql-stored - 過程)相關? – rene
這是相關的,但不清楚如何使用準備好的語句來執行此查詢。 MySQL要求參數值是用戶變量,所以它看起來像一個解決方案將不得不使用準備好的語句,該語句循環來自information_schema.columns表的結果。 – Sam