Oracle 中的循环游标

Cursor for loop in Oracle(Oracle 中的循环游标)
本文介绍了Oracle 中的循环游标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请解释一下如何在 oracle 中使用游标 for 循环.

Please, explain me how to use cursor for loop in oracle.

如果我使用下一个代码,一切都很好.

If I use next code, all is fine.

for rec in (select id, name from students) loop
    -- do anything
end loop;

但是如果我为这个 sql 语句定义了变量,它就不起作用了.

But if I define variable for this sql statement, it doesn't work.

v_sql := 'select id, name from students';

for rec in v_sql loop
    -- do anything
end loop;

错误:PLS-00103

Error: PLS-00103

推荐答案

要解决与您的问题中的第二种方法相关的问题,您需要使用

To address issues associated with the second approach in your question you need to use

游标变量和显式打开游标和获取数据的方式.不是

cursor variable and explicit way of opening a cursor and fetching data. It is not

允许在 FOR 循环中使用游标变量:

allowed to use cursor variables in the FOR loop:

declare
  l_sql varchar2(123);        -- variable that contains a query
  l_c   sys_refcursor;        -- cursor variable(weak cursor). 
  l_res your_table%rowtype;   -- variable containing fetching data  
begin
  l_sql := 'select * from your_table';

  -- Open the cursor and fetching data explicitly 
  -- in the LOOP.

  open l_c for l_sql;

  loop
    fetch l_c into l_res;
    exit when l_c%notfound;   -- Exit the loop if there is nothing to fetch.

     -- process fetched data 
  end loop;

  close l_c; -- close the cursor
end;

了解更多

这篇关于Oracle 中的循环游标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)