如何将SQL查询返回的两个单列ID值分别存入对应变量?
嘿,我来帮你搞定这个问题!你想要把对应bonus和Pnlty的两个ID分别存入变量,其实只要调整一下查询逻辑,结合INTO子句就能实现,下面给你两种靠谱的方案:
方案1:PIVOT + INTO 直接赋值
你已经用到了PIVOT,只需要给转置后的列指定明确别名,再用INTO把列值对应到变量就行:
DECLARE bId NUMBER; pID NUMBER; BEGIN WITH BaseData AS ( SELECT ID, CODE FROM table1 WHERE CODE IN ('bonus', 'Pnlty') AND dcl_id = iId -- 注意WHERE条件用=,:=是PL/SQL赋值符,不能放这 ) SELECT bonus_id, pnlty_id INTO bId, pID FROM BaseData PIVOT ( MAX(ID) FOR CODE IN ('bonus' AS bonus_id, 'Pnlty' AS pnlty_id) ); -- 可选:验证变量值 DBMS_OUTPUT.PUT_LINE('Bonus对应的ID: ' || bId); DBMS_OUTPUT.PUT_LINE('Penalty对应的ID: ' || pID); END; /
方案2:条件聚合(更直观)
如果觉得PIVOT有点绕,用条件聚合的写法会更直接,一次查询返回两个目标值,再存入变量:
DECLARE bId NUMBER; pID NUMBER; BEGIN SELECT MAX(CASE WHEN CODE = 'bonus' THEN ID END), MAX(CASE WHEN CODE = 'Pnlty' THEN ID END) INTO bId, pID FROM table1 WHERE CODE IN ('bonus', 'Pnlty') AND dcl_id = iId; -- 可选:验证变量值 DBMS_OUTPUT.PUT_LINE('Bonus对应的ID: ' || bId); DBMS_OUTPUT.PUT_LINE('Penalty对应的ID: ' || pID); END; /
重要注意事项
- 确保查询最终只返回1行:你说原查询始终返回2条数据,PIVOT或条件聚合会把这两行转成1行2列,刚好匹配
INTO对单行结果的要求; - 别搞混赋值符:SQL的WHERE条件里用
=,:=是PL/SQL的变量赋值符号,不能用在WHERE子句中。
内容的提问来源于stack exchange,提问作者RealMan
相关产品推荐
相关产品推荐

