PL / SQL - 在嵌套查询中使用变量

时间:2010-09-28 19:29:13

标签: sql oracle variables plsql cursor

我想用PL / SQL做这样的事情:

for ACCOUNT in account_cursor
loop

   for related_data in (select something from table where some_column = ACCOUNT.column)
   loop

   endloop;       

endloop;

(强调上限)

我离开了我的开发环境所以我无法测试它,所以请忽略任何轻微的语法错误。我更关心的是我是否可以这样使用变量。

编辑:

探索我正在努力实现的目标。我有两个巨大的表:帐户和日志。我想获取特定几个帐户的日志数据。由于记录的数量,直接选择/加入非常慢。我试图通过首先选择我感兴趣的帐户然后将这些帐户加入日志表来加速进程。任何建议将不胜感激。

3 个答案:

答案 0 :(得分:3)

您似乎将显式游标(account_cursor)与隐式游标(related_data)混合......

除了ENDLOOP需要END LOOP之外,它在句法上是正确的&有效。你可以see examples of both types of cursors in this link。但我想知道你实际上在做什么来看看光标方法是否真的有必要。

答案 1 :(得分:0)

请在使用此方法之前阅读上述回复。从技术上讲,是的,你可以访问变量......就像这样。

for v_dept_rec in (select deptno from dept where deptno in (10,20)) loop
     for v_emp_rec in (select empno from emp where deptno = V_DEPT_REC.DEPT_NO) loop

      <<<Process here>>

     end loop;
end loop;
  

“我使用了编写查询   加入/ where子句,我正在寻找   使用可能的速度改进   这种方法“

总是这很慢,因为这是逐行处理。如果您可以为您的逻辑发布代表性代码,您将获得响应,指示如何在集合中处理相同的代码。

答案 2 :(得分:0)

正如Rajesh所说,在游标中执行此操作将非常缓慢。

如果查询未使用适当的索引,那么相对较少的值的直接选择/连接应该在大型表上很慢 - 检查帐户号和索引表中是否存在帐号的索引。如果有,请检查您的查询是否在解释计划中使用它们。