[英]Stored Procedure - Need to use the result of a SELECT statement
以下存儲過程將返回帶有正確總數的NoOfArticles
列的結果。
DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_membersarea`(IN reqdTable varchar(30), IN ScannerID INT, IN MemberID INT)
BEGIN
declare NoOfArticles INT(11);
SET @sql_text = concat("SELECT COUNT(*) AS NoOfArticles FROM t_annualdetails WHERE ScannerID = ", ScannerID);
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
到現在為止還挺好。 這是我的問題。 我希望能夠在同一存儲過程的另一個查詢中使用此“結果”,但是我不知道如何實現它。 我希望它能像這樣工作:
SET @NoOfArticles = NoOfArticles;
SET @sql_text = concat("UPDATE ", reqdTable, " SET Scan = ", @NoOfArticles, " WHERE MemberID = ", MemberID);
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
顯然,這是行不通的,但是我希望將“結果”( NoOfArticles
)放在變量(即@NoOfArticles
)中,然后在UPDATE
語句中使用該變量( @NoOfArticles
)。
我整整一天都沒有成功。 感謝您提供指導。 謝謝。
是INTO
而不是AS
DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_membersarea`(IN reqdTable varchar(30), IN ScannerID INT, IN MemberID INT)
BEGIN
declare NoOfArticles INT(11);
/*----------------------------------here-v--into-instead-of-as-----------------*/
SET @sql_text = concat("SELECT COUNT(*) INTO NoOfArticles FROM t_annualdetails WHERE ScannerID = ", ScannerID);
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @NoOfArticles = NoOfArticles;
SET @sql_text = concat("UPDATE ", reqdTable, " SET Scan = ", @NoOfArticles, " WHERE MemberID = ", MemberID);
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
/*you can also use parameters, but not for tablename*/
SET @sql_text = concat("UPDATE ", reqdTable, " SET Scan = ? WHERE MemberID = ?");
PREPARE stmt FROM @sql_text;
EXECUTE stmt USING NoOfArticles, MemberID;
END //
DELIMITER ;
編輯:
DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_membersarea`(IN reqdTable varchar(30), IN ScannerID INT, IN MemberID INT)
BEGIN
SET @sql_text = concat("SELECT COUNT(*) INTO @NoOfArticles FROM t_annualdetails WHERE ScannerID = ", ScannerID);
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
/*you can also use parameters, but not for tablename*/
SET @sql_text = concat("UPDATE ", reqdTable, " SET Scan = ? WHERE MemberID = ?");
PREPARE stmt FROM @sql_text;
EXECUTE stmt USING @NoOfArticles, MemberID;
END //
DELIMITER ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.