oracle中 begin end 查询

你们都是坏人 2017-02-15 04:43:22
以下 sql 该如何修改才能运行

begin
for i in 8316..8531 loop
select * from spx where casena=i and cloc='A2-N-1F/2F';
end loop;
end;
...全文
749 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
POM_24 2017-02-16
  • 打赏
  • 举报
回复
可以使用游标代替

declare
  cursor c is
    select *
      from spx
     where i between 8316 and 8531
       and cloc = 'A2-N-1F/2F';
  c_row c%rowtype;
begin
  for c_row in c loop
    dbms_output.put_line(c_row.spx表字段1 || c_row.spx表字段2 || c_row.spx表字段3........ .);
  end loop;
end;
你们都是坏人 2017-02-16
  • 打赏
  • 举报
回复
引用 2 楼 wmxcn2000 的回复:
楼主执行查询后,要做什么操作呢? 在 PLSQL 块中,不可以只查询,而不做操作的; 参考 1# 代码;
要查询 出 casena 的值 从 8316 到 8531 之间的资料。 (并且 cloc='A2-N-1F/2F') select * from spx where casena=i and cloc='A2-N-1F/2F';
落落叶叶无声 2017-02-15
  • 打赏
  • 举报
回复
begin end 查询SELECT 要用into
KarliYang 2017-02-15
  • 打赏
  • 举报
回复
sql 的sql server 和oracle 是由区别的,sql server: declare @name int,@i int declare @Str1 varchar(1000) begin set @i=8316 while @i <=8531 begin --比如要查name列,拼接动态sql语句 SET @Str1='select @name=name FROM spx where cloc='A2-N-1F/2F' and casena=' & i --动态执行SQL语句 exec sp_executesql @Str1, N'@name int out', @name out set @i=@i+1 end end
卖水果的net 2017-02-15
  • 打赏
  • 举报
回复
楼主执行查询后,要做什么操作呢? 在 PLSQL 块中,不可以只查询,而不做操作的; 参考 1# 代码;
蓝色蛋饼 2017-02-15
  • 打赏
  • 举报
回复
语句块
declare
  --定义变量
  v_id   number;
  v_name varchar2(20);
begin
  for i in 8316 .. 8531 loop 
   select id, name  --需要的列数据
    into v_id, v_name  --需要into变量后使用
   from spx  --确认有且只有一条结果  没有数据会提示no_data_found 多条数据提示-实际返回的行数超出请求的行数
   where casena=i and cloc='A2-N-1F/2F'; 
  dbms_output.put_line('v_id=' || v_id || ' ,v_name=' || v_name);
end loop;
end;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧