我需要使用一個變量來指示在遊標聲明中要查詢的數據庫。下面是代碼的一小段:MySQL存儲過程:在遊標聲明中使用變量作爲數據庫名稱
CREATE PROCEDURE `update_cdrs_lnp_data`(IN dbName VARCHAR(25), OUT returnCode SMALLINT)
cdr_records:BEGIN
DECLARE cdr_record_cursor CURSOR FOR
SELECT cdrs_id, called, calling FROM dbName.cdrs WHERE lrn_checked = 'N';
# Setup logging
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
#call log_debug('Got exception in update_cdrs_lnp_data');
SET returnCode = -1;
END;
正如你所看到的,我試圖使用變量DBNAME以指示數據庫查詢應內發生。但是,MySQL不會允許這樣做。我也試過這樣的東西,如:
CREATE PROCEDURE `update_cdrs_lnp_data`(IN dbName VARCHAR(25), OUT returnCode SMALLINT)
cdr_records:BEGIN
DECLARE cdr_record_cursor CURSOR FOR
SET @query = CONCAT("SELECT cdrs_id, called, calling FROM " ,dbName, ".cdrs WHERE lrn_checked = 'N' ");
PREPARE STMT FROM @query;
EXECUTE STMT;
# Setup logging
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
#call log_debug('Got exception in update_cdrs_lnp_data');
SET returnCode = -1;
END;
當然,這不起作用,因爲MySQL只允許在遊標聲明中的標準SQL語句。
任何人都可以通過傳入應該受到影響的數據庫的名稱來思考一種方法來在多個數據庫中使用相同的存儲過程嗎?
noonex - 這似乎是一個好主意。但是,我如何迭代結果呢? – Justin 2009-11-05 15:55:14