循环中的事件处理程序似乎使它下面编写的每个代码都无效
Event handler in a loop seems to invalidate every code written below it
我正在处理我的数据库项目,我尝试制作一个存储过程,每当调用此过程时都会自动将数据生成到列中(它会自动调用到我用来将数据插入的过程中table).
我正在使用 Cursor 遍历我的 table,由于我还不习惯 Cursors,所以我使用了 a page out of this example。但是,当我尝试 运行 DataGrip 中的代码时,它显示循环中的每个代码,在事件处理程序下面都被标记为无法访问的代码。我的猜测是 DataGrip 或循环本身将事件处理程序视为中断语句,这似乎是真的,因为当我移动我的事件处理程序时,以前无法访问的代码不再被标记为无法访问。
CREATE PROCEDURE generateTF()
BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_transac_ID INT; DECLARE v_dpptotal INT; DECLARE v_tprice INT; DECLARE v_tdisc INT;
DECLARE generate_tf CURSOR FOR
SELECT transaction_id, dpptotal, total_discount FROM transaction;
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET v_finished = 1;
OPEN generate_tf;
generate : LOOP
FETCH generate_tf INTO v_transac_ID, v_dpptotal, v_tdisc;
if v_finished = 1 THEN
LEAVE generate;
END IF;
--From here
IF NOT EXISTS (SELECT total_price FROM transaction WHERE transaction_id = v_transac_ID) THEN
UPDATE transaction SET total_price = (SELECT totalprice(v_dpptotal)) WHERE transaction_id = v_transac_ID;
END IF;
SET v_tprice = totalprice(v_dpptotal);
IF NOT EXISTS (SELECT final_price FROM transaction WHERE transaction_id = v_transac_ID) THEN
UPDATE transaction SET final_price = (SELECT finalprice(v_tprice, v_tdisc)) WHERE transaction_id = v_transac_ID;
END IF; --To here, is unreachable.
END LOOP generate;
CLOSE generate_tf;
END;
我尝试将处理程序放在循环的底部,但正如预期的那样,它没有做任何事情,即使它确实解除了代码无法访问的问题,但它只使循环迭代一次,我认为.
我希望这是我使用事件处理程序或循环的方式的问题。我确实尝试搜索是否有人遇到同样的问题,但一无所获。
这里是问题,已修复,即将发布。 https://youtrack.jetbrains.com/issue/DBE-7554
我正在处理我的数据库项目,我尝试制作一个存储过程,每当调用此过程时都会自动将数据生成到列中(它会自动调用到我用来将数据插入的过程中table).
我正在使用 Cursor 遍历我的 table,由于我还不习惯 Cursors,所以我使用了 a page out of this example。但是,当我尝试 运行 DataGrip 中的代码时,它显示循环中的每个代码,在事件处理程序下面都被标记为无法访问的代码。我的猜测是 DataGrip 或循环本身将事件处理程序视为中断语句,这似乎是真的,因为当我移动我的事件处理程序时,以前无法访问的代码不再被标记为无法访问。
CREATE PROCEDURE generateTF()
BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_transac_ID INT; DECLARE v_dpptotal INT; DECLARE v_tprice INT; DECLARE v_tdisc INT;
DECLARE generate_tf CURSOR FOR
SELECT transaction_id, dpptotal, total_discount FROM transaction;
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET v_finished = 1;
OPEN generate_tf;
generate : LOOP
FETCH generate_tf INTO v_transac_ID, v_dpptotal, v_tdisc;
if v_finished = 1 THEN
LEAVE generate;
END IF;
--From here
IF NOT EXISTS (SELECT total_price FROM transaction WHERE transaction_id = v_transac_ID) THEN
UPDATE transaction SET total_price = (SELECT totalprice(v_dpptotal)) WHERE transaction_id = v_transac_ID;
END IF;
SET v_tprice = totalprice(v_dpptotal);
IF NOT EXISTS (SELECT final_price FROM transaction WHERE transaction_id = v_transac_ID) THEN
UPDATE transaction SET final_price = (SELECT finalprice(v_tprice, v_tdisc)) WHERE transaction_id = v_transac_ID;
END IF; --To here, is unreachable.
END LOOP generate;
CLOSE generate_tf;
END;
我尝试将处理程序放在循环的底部,但正如预期的那样,它没有做任何事情,即使它确实解除了代码无法访问的问题,但它只使循环迭代一次,我认为.
我希望这是我使用事件处理程序或循环的方式的问题。我确实尝试搜索是否有人遇到同样的问题,但一无所获。
这里是问题,已修复,即将发布。 https://youtrack.jetbrains.com/issue/DBE-7554