Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / условная сортировка в курсоре / 14 сообщений из 14, страница 1 из 1
22.05.2003, 11:06:28
    #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
22.05.2003, 11:12:27
    #32165862
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условная сортировка в курсоре
to Sintetik:

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

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

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

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

либо 0, либо 1, и он передается, я проверял,
более того даже такой тупой вариант как DECODE(0,0,12,1,8)
не проходит
...
Рейтинг: 0 / 0
22.05.2003, 12:15:33
    #32165969
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условная сортировка в курсоре
Просто я к тому, где ты прочитал про то что так можно делать?
...
Рейтинг: 0 / 0
22.05.2003, 12:25:22
    #32165982
Sintetik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условная сортировка в курсоре
да здесь, на форуме, поискал, там правда выбирали по наименованию столбца, и версия оракла была побольше, чем у меня, но ведь кушает же, синтаксис значит в порядке
...
Рейтинг: 0 / 0
22.05.2003, 12:44:06
    #32166017
Sintetik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условная сортировка в курсоре
/topic/18131
...
Рейтинг: 0 / 0
22.05.2003, 13:01:37
    #32166051
Duce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условная сортировка в курсоре
А мне кажется, все верно(но не проверял - негде ныне) - упорядочивает по значению функции, которое возвращается для каждой строки. За столбец он это не берет. Тут арифметика не уместна %). Мож ты сортируешь по хитрому
арифм. выражению...
...
Рейтинг: 0 / 0
22.05.2003, 13:02:55
    #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
22.05.2003, 13:19:14
    #32166089
Sintetik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условная сортировка в курсоре
хорошо, чем это принципиально отличается от

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


где переменная передается в процедуру как параметр?
...
Рейтинг: 0 / 0
22.05.2003, 13:40:22
    #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
22.05.2003, 14:00:47
    #32166148
Sintetik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условная сортировка в курсоре
похоже на правду, а как это можно обойти в одном курсоре?
на крайняк я опишу 2 курсора и буду делать фетч из того или другого
в зависимости от переменной.
...
Рейтинг: 0 / 0
24.05.2003, 17:12:29
    #32167939
vskv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условная сортировка в курсоре
Дык у тебя же текст курсора статический.
Что тебе мешает сделать Order By DECODE(bByWorkPlace,0,name_of_col_12,1,name_of_col_8), ???
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / условная сортировка в курсоре / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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