[英]Select statement inside cursor in mysql stored procedure is not taking into keyword
[英]'select into' statement not working in mysql store procedure with cursor
這是問題所在:temprequest是我從中獲取行的表。 我在獲取時根據temprequest表查找可交付表的deliveryableId列。 因此,我使用select into語句。 但我將查找值放在其中的變量僅適用於獲取的第一行。
“開始結尾”塊:
DECLARE no_more_rows BOOLEAN;
DECLARE nr_rows INT DEFAULT 0;
DECLARE loop_cntr INT DEFAULT 0;
declare delId int;
declare vtname varchar(200);
declare tversion varchar(200);
declare custId int;
declare prod varchar(200);
DECLARE c_temp CURSOR FOR select tname, version,BuID,BuprodName from temprequest;
SET no_more_rows = False;
OPEN c_temp;
select FOUND_ROWS() into nr_rows;
the_loop:LOOP
FETCH c_temp into vtname,tversion,custId, prod;
IF no_more_rows THEN
LEAVE the_loop;
END IF;
-- statements for each request record
Set delId= (SELECT deliverableId
FROM deliverable
WHERE deliverable.Product_prodName =vtname AND deliverable.version = tversion);
INSERT INTO request VALUES (delId, custId, prod);
SET loop_cntr = loop_cntr + 1;
END LOOP the_loop;
CLOSE c_temp;
要在沒有光標的情況下完成相同的操作,請使用(UPDATED ):
INSERT INTO request
SELECT
deliverable.deliverableId as delId,
qwe.BuID as custId,
qwe.BuprodName as prod
FROM deliverable
inner join
(select tname, version, BuID,BuprodName
from temprequest)
as qwe (tname, version, BuID,BuprodName)
on deliverable.Product_prodName = qwe.vtname
AND deliverable.version = qwe.tversion
我剛剛意識到BuID
和BuprodName
在這里是常量,除了insert語句之外沒有在其他地方使用。
如果游標內的任何查詢均未獲取任何結果,則將no_more_rows變量設置為true。 在您的情況下,如果以下查詢未獲取任何結果,即使在這種情況下, no_more_rows
也將被評估為true
。
SELECT deliverableId
FROM deliverable
WHERE deliverable.Product_prodName =vtname AND deliverable.version = tversion
解決方案是在游標的末尾將no_more_rows設置為false,以便即使在游標執行期間將其評估為true,也將重置該游標並僅在游標查詢沒有返回任何行時退出。
he_loop:LOOP
FETCH c_temp into vtname,tversion,custId, prod;
IF no_more_rows THEN
LEAVE the_loop;
END IF;
-- statements for each request record
Set delId= (SELECT deliverableId
FROM deliverable
WHERE deliverable.Product_prodName =vtname AND deliverable.version = tversion);
INSERT INTO request VALUES (delId, custId, prod);
SET loop_cntr = loop_cntr + 1;
SET no_more_row = false
END LOOP the_loop;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.