2012-03-16 3 views
1

Довольно глупый вопрос. У меня есть Oracle Db с продуктами и теперь читаю первые 10 продуктов.Приращение переменной/счетчика в PL/SQL Выберите результат

Теперь я хочу на следующем экране

1 Product A 
2 Product XY 
3 Product B 

Глупые вопросы, но как получить счетчик перед? Я, очевидно, должен увеличиваться, но я не понимаю, как это работает. Я также думал работать с таблицами WITH и tmp, но не могу понять, как это нужно настроить.

SELECT POS ???, PRODUCTNAME FROM TBLPRODUCT 

Я не очень хорошо знаком с PL/SQL. Может ли кто-нибудь дать мне подсказку? Спасибо.

ответ

7

ROWNUM - это один подход, как показано Бобком, но если вы используете более сложные запросы - особенно если вы произвольно заказываете строки - это может не дать желаемых результатов.

В настоящее время, аналитические функции, как правило, лучший подход, как у вас есть явное управление упорядочением:

SELECT ROW_NUMBER() OVER (ORDER BY productname), productname 
    FROM tableproduct 
    ORDER BY productname 

Обратите внимание, что порядок строк, который определяет число строк отделен от упорядочения общего результата задавать. В этом примере я использовал тот же порядок, что и вы, вероятно, захотите, но стоит отметить, что это дает вам большую гибкость.

(И извинения за то, что немного педантичный, но это не имеет ничего общего с PL/SQL, который является процедурным языком встроенный в Oracle. Это просто о внедрении Oracle о SQL.)

+2

+1, есть ничего плохого в том, чтобы быть педантичным, если информация, которую вы передаете, делает вещи более ясными и обеспечивает лучшее понимание OP. – Ollie

+0

Спасибо за ваше решение. Это очень интересно и снова показывает мне все, что я не знаю :(Но я просто понял, что хочу видеть только первые 10, но почему-то, когда я сейчас говорю WHERE ROWNUM <= 10, чем это не работает правильно, и он показывает мне неправильные данные. Любая идея? О, и жаль, что я использовал неправильный тег ... – Luka

+0

@Luka - взгляните на это, чтобы пример правильного выполнения верхнего n-запроса в Oracle: http://stackoverflow.com/questions/6858325/oracle-top-n-ordered-rows. Если это не даст вам достаточно информации для решения вашей проблемы, сообщите мне. –

5

Используйте ROWNUM, как в

SELECT ROWNUM, PRODUCTNAME FROM TBLPRODUCT 

Share и наслаждайтесь.

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