【问题标题】:Fetch subquery value from cursor to parameter in PL/SQL在 PL/SQL 中从游标获取子查询值到参数
【发布时间】:2018-09-26 21:29:29
【问题描述】:

我有以下查询来选择子查询的计数:

SELECT COUNT(*) FROM (select crs_cust.CUSTOMER_ID, 
subset.NEW_REFERENCE_ID FROM CRS_CUSTOMERS crs_cust INNER JOIN DAY0_SUBSET subset ON crs_cust.CUSTOMER_ID=subset.CURRENT_CUSTOMER_ID);

以上查询是从 PL/SQL 中的游标执行的,如何从子查询(CUSTOMER_IDNEW_REFERENCE_ID)中提取列到相应的参数中?

游标应该有多个记录。类似如下:

p_Count := SELECT COUNT(*) FROM DAY0_SUBSET;
OPEN c1; 
LOOP
FETCH c1 into p_Current_CustomerId,p_New_Cust_Ref_ID; -->query from cursor's subquery
EXIT WHEN c1%NOTFOUND;
EXIT WHEN (c1%ROWCOUNT <> p_Count);

FOR i IN c1 LOOP
<do manipulation of subquery values>
END LOOP;
END IF;
CLOSE c1;  

【问题讨论】:

    标签: oracle plsql cursor subquery fetch


    【解决方案1】:

    子查询的列未投影,因此您无法引用它们。如果你想在你的程序中使用CUSTOMER_IDNEW_REFERENCE_ID,你必须在顶层SELECT 子句中选择它们。 解决方案的最简单答案是为您的 子查询本身,例如:

    BEGIN
      FOR cur IN (SELECT crs_cust.CUSTOMER_ID, subset.NEW_REFERENCE_ID
                   FROM CRS_CUSTOMERS crs_cust
                    INNER JOIN DAY0_SUBSET subset ON 
                      crs_cust.CUSTOMER_ID=subset.CURRENT_CUSTOMER_ID)
      LOOP
         DBMS_OUTPUT.PUT_LINE(cur.customer_id || ', ' || cur.new_reference_id);
      END LOOP;
    END;
    /
    

    【讨论】:

    • 谢谢,我想的另一种方法是删除 SELECT COUNT(*) FROM,只需为子查询打开一个游标。并使用 c1%ROWCOUNT 引用游标获取的记录数。
    • 是的,您也可以这样做。你想做什么?听起来您想同时拥有CUSTOMER_IDNEW_REFERENCE_ID 以及总行数?如果是这样,那么您完全可以按照您所说的方式进行操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多