Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Функция управления


Автор: Неопытный 9.1.2007, 13:40
В Аксесе есть функция Iif(выражение;p1;p2) (если выражение - истина, то p1, иначе p2)
Есть ли подобная функция в Sql Plus и какой ее синтаксис?

Автор: 3x3 9.1.2007, 14:20
См. decode и case

Автор: Неопытный 9.1.2007, 14:26
А синтаксис какой?

Автор: LSD 9.1.2007, 14:27
Цитата(Неопытный @  9.1.2007,  14:26 Найти цитируемый пост)
А синтаксис какой?

Вверху страницы есть ссылка на документацию по Oracle. Там есть описание синтаксиса.

Автор: 3x3 9.1.2007, 14:32
http://www.techonthenet.com/oracle/functions/decode.php
http://www.techonthenet.com/oracle/functions/case.php
http://google.com/

Автор: Неопытный 9.1.2007, 14:46
Спасибо!

Автор: Неопытный 15.1.2007, 18:34
А функция нахождения длины строки имеется? 
Len, Length - 

Автор: 3x3 15.1.2007, 18:52
Цитата(Неопытный @ 15.1.2007,  18:34)
А функция нахождения длины строки имеется? 
Len, Length -

Кто её знает... Посмотри http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14200/toc.htm smile

Автор: LSD 15.1.2007, 19:17
http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14200/functions076.htm#i77725

А вообще может уже пора научиться пользоваться документацией?

Автор: Неопытный 10.3.2007, 11:43
SELECT supplier_id, 
decode(trunc ((supplier_id - 1) / 10), 0, 'category 1', 
 1, 'category 2', 
 2, 'category 3', 
  'unknown') result 
FROM suppliers; 

In this example, based on the formula:

trunc ((supplier_id - 1) / 10

The formula will evaluate to 0, if the supplier_id is between 1 and 10.
The formula will evaluate to 1, if the supplier_id is between 11 and 20.
The formula will evaluate to 2, if the supplier_id is between 21 and 30.


А если мне надо 
0, если [0,3)
1, если [3,7]
2, если (7,19]
3, если (19,22)
...
Разве нет нормальных функций в которых можно сразу условие задавать? 

Автор: LSD 10.3.2007, 13:38
Цитата(Неопытный @  10.3.2007,  11:43 Найти цитируемый пост)
Разве нет нормальных функций в которых можно сразу условие задавать?

В PL/SQL можно, в SQL нет. Если у тебя хитрые запросы, пиши на PL/SQL свою функцию.

Автор: Sqlninja 12.3.2007, 12:03
Цитата(LSD @  10.3.2007,  13:38 Найти цитируемый пост)
В PL/SQL можно, в SQL нет

Не понял. А про CASE что, все забыли?

Цитата(Неопытный @  10.3.2007,  11:43 Найти цитируемый пост)
Разве нет нормальных функций в которых можно сразу условие задавать?


Код

SELECT CASE
          WHEN ut.pct_free > 10
       AND    ut.pct_free < 100
       AND    ut.pct_used < 100
             THEN 'yes'
          ELSE 'no'
       END my_case
FROM   user_tables ut;


Автор: LSD 12.3.2007, 13:05
Цитата(Sqlninja @  12.3.2007,  12:03 Найти цитируемый пост)
Не понял. А про CASE что, все забыли?

Так CASE ему уже советовали, но он его чем-то не устроил.

Автор: Неопытный 12.3.2007, 13:15
Не хочется открывать новую тему - какая функция конвертирует Null в 0

Автор: LSD 12.3.2007, 13:30
http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14200/functions106.htm#i91806

Автор: Неопытный 17.3.2007, 11:27
SELECT id, 
decode(id, 0,1, 
 1, 2, 
 3,4, 
  ...
  ...    //Всего  пусть 1000 условий
       ) result 
FROM suppliers; 
Oracle говорит слишком много аргументов, как быть?

Может так 
 
decode(id,0,1
 decode(id,1,2, decode(id,2,3,...) )  )
Сколько уровней вложенности допускается? Может можно как то по другому?


Автор: LSD 17.3.2007, 14:30
Вообще-то если у вас 100 условий которые надо проверить - то надо менять логику работы.
Возможно ввести таблицу в которую забить соответсвия.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)