Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 将子查询值从游标提取到PL/SQL中的参数_Oracle_Plsql_Cursor_Subquery_Fetch - Fatal编程技术网

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

Oracle 将子查询值从游标提取到PL/SQL中的参数,oracle,plsql,cursor,subquery,fetch,Oracle,Plsql,Cursor,Subquery,Fetch,我有以下查询来选择子查询的计数: 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\u ID和NEW

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

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\u ID
NEW\u REFERENCE\u 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;  
p_Count:=从第0天_子集中选择Count(*);
开c1;
环
将c1提取到p_当前客户ID、p_新客户参考ID;-->来自游标子查询的查询
未找到c1%时退出;
退出时(c1%行计数p_计数);
对于c1循环中的i
端环;
如果结束;
关闭c1;

子查询的列未投影,因此您无法引用它们。如果您想在程序中使用
CUSTOMER\u ID
NEW\u REFERENCE\u 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;
/

子查询的列未投影,因此无法引用它们。如果您想在程序中使用
CUSTOMER\u ID
NEW\u REFERENCE\u 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(*),只需为子查询打开一个光标。并使用c1%ROWCOUNT引用游标获取的记录数。是的,您也可以这样做。你想做什么?听起来您想同时拥有
CUSTOMER\u ID
NEW\u REFERENCE\u ID
以及行总数?如果是这样的话,那么您可以完全按照您所说的方式来做。谢谢,我想的另一种方法是从中删除SELECT COUNT(*),只需打开子查询的游标。并使用c1%ROWCOUNT引用游标获取的记录数。是的,您也可以这样做。你想做什么?听起来您想同时拥有
CUSTOMER\u ID
NEW\u REFERENCE\u ID
以及行总数?如果是这样的话,你就可以完全按照你说的方式去做。