循环遍历 Oracle PL/SQL 中的表

Posted

技术标签:

【中文标题】循环遍历 Oracle PL/SQL 中的表【英文标题】:Loop through a table in Oracle PL/SQL 【发布时间】:2015-02-07 21:02:30 【问题描述】:

我已经完成了 SQL 查询,但还没有完成任何使用循环的程序编写,所以我在这里迷失了方向。我正在使用 Oracle SQL Developer。可以在 SQL 或 PL/SQL 中完成

我有一个类似这样的表:

Person_ID Score Name  Game_ID
1         10    jack  1
1         20    jack  2
2         15    carl  1
2         3     carl  3
4         17    steve 1

我如何循环遍历此表,以便获取玩家所有游戏的总得分。结果是这样的:

Person_ID Score Name
1         30    jack
2         18    carl
4         17    steve

如果我只想抢游戏 1 2 怎么办?


编辑:抱歉不清楚,但我确实需要使用循环来执行此操作,即使没有它也可以完成。

【问题讨论】:

“可以在 SQL 或 PL/SQL 中完成”是什么意思? SQL 没有任何循环的概念,它是一种基于集合的语言。 【参考方案1】:

修改后的解决方案

此过程列出给定 game_id 的分数。如果省略参数,所有游戏将被求和:

create or replace procedure player_scores(i_game_id number default null) as 
begin
  for o in (select person_id, name, sum(score) score
      from games where game_id = nvl(i_game_id, game_id)
      group by person_id, name)
  loop
    dbms_output.put_line(o.person_id||' '||o.name||' '||o.score);
  end loop;
end player_scores;

以前的解决方案:

你不需要这个过程,只需简单的查询:

select person_id, name, sum(score)
  from your_table
  where game_id in (1, 2)
  group by person_id, name

【讨论】:

感谢您的回复,但我确实需要它实际上是一个带有循环的过程 完成。我会将您的数据分成两张表:游戏和玩家,但这取决于您。

以上是关于循环遍历 Oracle PL/SQL 中的表的主要内容,如果未能解决你的问题,请参考以下文章

循环oracle pl/sql中的表名

用于遍历多行的 Oracle PL/SQL 函数

在 Oracle PL/SQL 中复制 SAS DO 循环

如何使用 PL/SQL 循环遍历 json 响应?

PL/SQL:循环遍历 XML 列并从重复元素中提取值

如何使用PL / SQL更改您在FOR循环IN子句中查询的表