0
任何人都可以幫助我調試這個存儲過程嗎?它完成了成功創建,但是當我在Navicat執行它,使用命令:MySQL存儲過程回聲「行受影響」,而不是所需的結果?
CALL getJoinTables('data2013q3', 2013, 2);
雖然它產生了我PROC內創建視圖...
schema table alias
data2013q3 b2013q2a a
data2013q3 b2013q2b b
master b2013q2t1 t1
master b2013q2t2 t2
master b2013q2t3 t3
的Navicat返回一個消息聲明:
affected rows: -6
當查詢應返回包含上述所有表的JOIN語句時。這裏是我的程序代碼:
CREATE PROCEDURE `common`.`getJoinTables`(IN strSchema varchar(35), IN iYr INT, IN iQtr INT)
BEGIN
DECLARE cursor_end CONDITION FOR SQLSTATE '02000';
DECLARE strPd, strTblPrefix, strBSearch, strMSearch VARCHAR(35);
DECLARE strSqlJoinTables VARCHAR(500);
DECLARE strTableSchema, strTable, strAlias VARCHAR(150);
DECLARE done, i INT DEFAULT 0;
DECLARE cur_tables CURSOR FOR SELECT strTableSchema, table_name, alias FROM common.vw_join_tables;
DECLARE CONTINUE HANDLER FOR cursor_end SET done = 1;
SET strPd = CONCAT(iYr, 'q', iQtr);
SET strTblPrefix = CONCAT('b', strPd);
SET strBSearch = CONCAT(strTblPrefix, '_');
SET strMSearch = CONCAT(strTblPrefix, 't_');
SET @strOut = '';
SET i=0;
SET @strSqlJoinTables = CONCAT('CREATE VIEW common.vw_join_tables AS SELECT table_schema, table_name, REPLACE(table_name, \'', strTblPrefix, '\', \'\') alias
FROM information_schema.TABLES
WHERE (table_schema = \'master\' AND table_name LIKE \'', strMSearch, '\') OR (table_schema = \'', strSchema, '\' AND table_name LIKE \'', strBSearch, '\')
GROUP BY table_schema, table_name
ORDER BY table_schema, table_name');
DROP VIEW IF EXISTS common.vw_join_tables;
SELECT @strSqlJoinTables;
PREPARE stmt from @strSqlJoinTables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
OPEN cur_tables;
FETCH cur_tables INTO strTableSchema, strTable, strAlias;
read_loop: LOOP
IF done THEN
LEAVE read_loop;
END IF;
IF i = 0 THEN
SET @strOut = CONCAT(strTableSchema, '.', strTable, ' ', strAlias, ' ');
ELSE
SET @strOut = CONCAT(@strOut, ' JOIN ', strTableSchema, '.', strTable, ' ', strAlias, ' ON a.id=', strAlias, '.id ');
END IF;
SET i = i+1;
FETCH cur_tables INTO strTableSchema, strTable, strAlias;
END LOOP;
CLOSE cur_tables;
SELECT @strOut;
END
你是絕對正確的,我想使用一個函數,但是,我動態生成SQL和使用準備好的語句,哪些(據我所知和閱讀)不允許在一個函數中。 – JLeRogue
啊,是的,這是準確的。我沒有仔細觀察你的程序的正文。 –