powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / условная сортировка в курсоре
14 сообщений из 14, страница 1 из 1
условная сортировка в курсоре
    #32165856
Sintetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делаю так

cursor cur is Select

.....

Order By DECODE(bByWorkPlace,0,12,1,8), 1, 2, 3, 5;

bByWorkPlace это параметр передваваемый в процедуру

не работает, в смысле как будто DECODE(bByWorkPlace,0,12,1,8) и не было
но на синтаксис не ругается

Oracle 8.0.6
...
Рейтинг: 0 / 0
условная сортировка в курсоре
    #32165862
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Sintetik:

В order by должно быть имя столбца, алиас или номер из списка выбранных столбцов.

Чего ты хочешь достичь указывая DECODE(bByWorkPlace,0,12,1,8)?
...
Рейтинг: 0 / 0
условная сортировка в курсоре
    #32165883
Sintetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сортировать по номеру из списка выбранных столбцов
если bByWorkPlace=0 то сортировка по столбцу 12
если 1 , то по столбцу 8
...
Рейтинг: 0 / 0
условная сортировка в курсоре
    #32165907
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"если bByWorkPlace=0 то сортировка по столбцу 12
если 1 , то по столбцу 8"

А как ты считаешь это условие bByWorkPlace=0 по какой строке дожно определяться?
Допустим в таблице 10 строк, для 5 строк bByWorkPlace=0, а для остальных bByWorkPlace=1?
...
Рейтинг: 0 / 0
условная сортировка в курсоре
    #32165937
Sintetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ни по какой

bByWorkPlace это параметр передваваемый в процедуру

либо 0, либо 1, и он передается, я проверял,
более того даже такой тупой вариант как DECODE(0,0,12,1,8)
не проходит
...
Рейтинг: 0 / 0
условная сортировка в курсоре
    #32165969
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто я к тому, где ты прочитал про то что так можно делать?
...
Рейтинг: 0 / 0
условная сортировка в курсоре
    #32165982
Sintetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да здесь, на форуме, поискал, там правда выбирали по наименованию столбца, и версия оракла была побольше, чем у меня, но ведь кушает же, синтаксис значит в порядке
...
Рейтинг: 0 / 0
условная сортировка в курсоре
    #32166017
Sintetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/topic/18131
...
Рейтинг: 0 / 0
условная сортировка в курсоре
    #32166051
Duce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне кажется, все верно(но не проверял - негде ныне) - упорядочивает по значению функции, которое возвращается для каждой строки. За столбец он это не берет. Тут арифметика не уместна %). Мож ты сортируешь по хитрому
арифм. выражению...
...
Рейтинг: 0 / 0
условная сортировка в курсоре
    #32166055
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"test it
exec open :result for 'select empno, ename, comm from emp ORDER BY DECODE (:p_sort,1, empno,2, comm)' using 1 "

Ты имеешь ввиду это? Я так понимаю что сначала текст парсится, после чего формируется уже конкретный запрос в зависимости от :p_sort, после чего запрос вида:
Код: plaintext
1.
select empno, ename, comm from emp ORDER BY empno


или
Код: plaintext
1.
select empno, ename, comm from emp ORDER BY comm


плсылается на выполнение.
...
Рейтинг: 0 / 0
условная сортировка в курсоре
    #32166089
Sintetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо, чем это принципиально отличается от

Код: plaintext
1.
WHERE
    столбец=переменная


где переменная передается в процедуру как параметр?
...
Рейтинг: 0 / 0
условная сортировка в курсоре
    #32166118
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз обьясняю, как я думаю, по крайне мере для 8i. Если я не прав, товарищи меня поправят.

Во фразе ORDER BY указывается название столбца, алиас столбца или номер в списке столбцов. В данном случае в ORDER BY не происходит никаких вычислений - ей просто указываются имя.

Допустим такой запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQLWKS> select
      2 >  decode(owner,'SYS', 1 , 0 ), count(*)
      3 > from 
      4 >  all_tables
      5 > group by owner
      6 > order by decode(owner,'SYS', 1 , 0 )
      7 > 
DECODE(OWN COUNT(*)  
 ---------- ----------
 
          0           75 
          0           28 
          0            1 
          0            3 
          0           10 
          0           50 
          0            2 
          1          189 
Выбрано  8  строк.

В данном случае во фразе OREDR BY указано название первого столбца запроса. Это не значит в ORDER BY происходят какие-то вычисления.

То-же самое можно написать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQLWKS> select
      2 >  decode(owner,'SYS', 1 , 0 ), count(*)
      3 > from 
      4 >  all_tables
      5 > group by owner
      6 > order by  1 
      7 > 
DECODE(OWN COUNT(*)  
 ---------- ----------
 
          0           75 
          0           28 
          0            1 
          0            3 
          0           10 
          0           50 
          0            2 
          1          189 
Выбрано  8  строк.


Или так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQLWKS> select
      2 >  decode(owner,'SYS', 1 , 0 )  "Вот нефига себе" , count(*)
      3 > from 
      4 >  all_tables
      5 > group by owner
      6 > order by  "Вот нефига себе" 
      7 > 
Вот нефига COUNT(*)  
 ---------- ----------
 
          0           75 
          0           28 
          0            1 
          0            3 
          0           10 
          0           50 
          0            2 
          1          189 
Выбрано  8  строк.


Или так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> select
 decode(owner,'SYS', 1 , 0 )  "SELECT SYSDATE FROM DUAL" , count(*)
from 
 all_tables
group by owner
order by  "SELECT SYSDATE FROM DUAL" ; 

SELECT SYSDATE FROM DUAL   COUNT(*)
 ------------------------ ----------
 
                        0            2 
                        0           15 
                        0            1 
                        1          173 
...
Рейтинг: 0 / 0
условная сортировка в курсоре
    #32166148
Sintetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже на правду, а как это можно обойти в одном курсоре?
на крайняк я опишу 2 курсора и буду делать фетч из того или другого
в зависимости от переменной.
...
Рейтинг: 0 / 0
условная сортировка в курсоре
    #32167939
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык у тебя же текст курсора статический.
Что тебе мешает сделать Order By DECODE(bByWorkPlace,0,name_of_col_12,1,name_of_col_8), ???
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / условная сортировка в курсоре
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]