Oracle 变量范围在查询的内部游标中不可用
在下面的查询中,我不能在最内部的查询中使用c.college\u id,因为它超出了范围,但是否有任何解决方案可以在最内部的查询中使用c.college\u id值,并且我不想在查询内部调用“coll\u details”,因为这会影响性能Oracle 变量范围在查询的内部游标中不可用,oracle,scope,cursor,Oracle,Scope,Cursor,在下面的查询中,我不能在最内部的查询中使用c.college\u id,因为它超出了范围,但是否有任何解决方案可以在最内部的查询中使用c.college\u id值,并且我不想在查询内部调用“coll\u details”,因为这会影响性能 WITH coll_details AS (SELECT cd.college_id , cd.college_name FROM college_det
WITH coll_details AS (SELECT cd.college_id
, cd.college_name
FROM college_details cd
)
SELECT c.college_name
CURSOR ( SELECT o.department
FROM (SELECT tc.department
, ROW_NUMBER() OVER(ORDER BY tc.college_id) rnum
FROM temp_college tc
WHERE tc.college_id = c.college_id
) o
WHERE o.rnum BETWEEN 1 AND 3
)
FROM coll_details c
您需要做的是在最里面的子查询中包含
college\u id
,然后在游标语句上进行筛选:
SELECT c.college_name
, CURSOR ( select department from (
SELECT tc.college_id
, tc.department
, row_number() over (partition by tc.college_id
order by tc.department_id) rn
FROM temp_college tc
) tc
where tc.college_id = c.college_id
and rn <= 3
) coll_depts
FROM college_details c
/
注意:由于示例数据,演示使用了
2
分页。我已经编辑了问题,请看一下。。我在这里使用分页的概念,所以我必须使用内部游标作为将来的参考,请发布一套完整的要求。发布不完整或半生不熟的问题只会浪费人们的时间。而这并不是对待那些你要求帮助你的人的方法。
COLLEGE_NAME COLL_DEPTS
---------------- --------------------
FOX COLLEGE CURSOR STATEMENT : 2
CURSOR STATEMENT : 2
DEPARTMENT
--------------------
PHYSICS
LATIN
BEETLE COLLEGE CURSOR STATEMENT : 2
CURSOR STATEMENT : 2
DEPARTMENT
--------------------
ETYMOLOGY
EARTH SCIENCE
KNOX INSTITUTE CURSOR STATEMENT : 2
CURSOR STATEMENT : 2
DEPARTMENT
--------------------
ASTROPHYSICS
COMPUTER SCIENCE
SQL>