You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:42:07