代码之家  ›  专栏  ›  技术社区  ›  user2102665

将子查询值从游标提取到PL/SQL中的参数

  •  0
  • user2102665  · 技术社区  · 7 年前

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

    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_ID NEW_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;  
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   gvenzl    7 年前

    子查询的列未投影,因此无法引用它们。如果你想要 CUSTOMER_ID NEW_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;
    /