Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Сортировка данных в таблице  [new]
panthe
Member

Откуда:
Сообщений: 4
Включите в пакет процедуру, которая считывает из базы данных информацию о первых N (передать в параметре) по возрастанию стоимостей заказах и именах их покупателей. Вызовите процедуру пакета из безымянного блока.

Решение:
create or replace package pac_price
 as
 procedure name_price
  (n in number);
end;
create or replace package body pac_price
 as
 procedure name_price
  (n in number)
  is
  cursor cur_ord is
  select cust.cname, ord.amt from cust, ord where cust.cnum = ord.cnum and rownum <= n order by ord.amt asc;  --неверно. 
--Этот запрос будет сначала выбирать первые n заказов, а затем их сортировать (сортировка всегда выполняется в последнюю
-- очередь), а требуется сначала отсортировать, а потом взять n первых заказов

 v_cname cust.cname%type;
 v_amt ord.amt%type;
  begin
  open cur_ord;
 loop
  fetch cur_ord into v_cname, v_amt;
  exit when (cur_ord%notfound);
  dbms_output.put_line(v_cname||' - '||v_amt);
 end loop;
 close cur_ord;
 end;
 end;

Как сначала отсортировать записи, а потом считать?
5 окт 18, 17:04    [21696633]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка данных в таблице  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9230
panthe,

Bыкинь and rownum <= n и просто выйди из FOR CURSOR LOOP после чтения n строк.

SY.
5 окт 18, 17:07    [21696637]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка данных в таблице  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 46373

panthe
Как сначала отсортировать записи, а потом считать?

Убери ограничение по количеству из запроса. Добавь его в FETCH.

Posted via ActualForum NNTP Server 1.5

5 окт 18, 17:18    [21696645]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка данных в таблице  [new]
panthe
Member

Откуда:
Сообщений: 4
Dimitry Sibiryakov, я сделал так
select * from (select cust.cname, ord.amt from cust, ord where cust.cnum = ord.cnum and order by ord.amt asc) where rownum <=n;
5 окт 18, 17:38    [21696660]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка данных в таблице  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1419
panthe,

имхо для малых n так луче из-за STOPKEY

.....
stax
8 окт 18, 14:06    [21698088]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить