2015-02-07 3 views
5

Я выполнил SQL-запросы, но не написал никаких процедур, которые используют циклы, поэтому я потерялся здесь. Я использую Oracle SQL Developer. Может быть сделано в SQL или PL/SQLЦикл через таблицу в Oracle 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?


EDIT: Извините за не ясно, но мне нужно сделать это с петлей, даже если это может быть сделано без него.

+1

Что вы имеете в виду, «может быть сделано в SQL или PL/SQL»? SQL не имеет понятия циклов, это язык на основе набора. –

ответ

11

Solution после после издания

Эта процедура список баллов для данного 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 
+0

Спасибо за ответ, но мне действительно нужна его процедура с петлей – AmericanSuave

+0

Готово. Я бы разделил ваши данные на две таблицы: игры и игроки, но это зависит от вас. –

Смежные вопросы