Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> условие if, [oracle] 
V
    Опции темы
ziga
Дата 4.8.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



мне надо составить запрос, что то типа такова условия

Код

if &param = 28 or &param = 29
    выполняем 1 запрос 
else 
    другой


гдето я уже видел то что мне надо но не смог найти :( 


PM MAIL   Вверх
Zloxa
Дата 4.8.2009, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Код

begin
  if 1=2 then 
    select 1 into foo from dual;
  else
    select 2 into foo from deal;
  end if;
end;

Код


select 
   case when 1=2
               then (select 1 from dual)
               else (select 2 from dual)
    end val
from dual;



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
ziga
Дата 4.8.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1





Код

begin
  if &param = 28 then
    select custom_str
    from custom_default
    where id_type_custom = &param;
  else
    select distinct param_value
    from human_custom_params 
    where id_type_custom_param = &param;
  end if;
end;


ругается на то что в селекте ожидалось INTO 
PM MAIL   Вверх
DimW
Дата 4.8.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(ziga @  4.8.2009,  12:56 Найти цитируемый пост)
ругается на то что в селекте ожидалось INTO

а вы ожидали что? такое чувство что вы хотите использовать что то там где это использовать нельзя...
задачу изложите более развернуто.
PM MAIL ICQ   Вверх
ziga
Дата 4.8.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



ну а что тут не понятного ? мне надо что бы когда я передаю в параметр значение он проверялся если = 28 то выводило значение из одного селекта а если != 28 то значение из ругого селекта 

Это сообщение отредактировал(а) ziga - 4.8.2009, 13:29
PM MAIL   Вверх
Zloxa
Дата 4.8.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(ziga @  4.8.2009,  12:56 Найти цитируемый пост)
ругается на то что в селекте ожидалось INTO  

Укажите INTO в селекте.

Добавлено через 37 секунд
Цитата(ziga @  4.8.2009,  13:23 Найти цитируемый пост)
ну а что тут не понятного ? 

Даже полсе объяснения понятнее не стало. Откуда параметр передаете, куда выводите?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
DimW
Дата 4.8.2009, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



это:
Цитата(ziga @  4.8.2009,  13:23 Найти цитируемый пост)
мне надо что бы когда я передаю в параметр значение он проверялся если = 28 то выводило значение из одного селекта а если != 28 то значение из ругого селекта 


эквивалентно этому:
Цитата

я передаю параметр куда-то и взависимости от значения параметра хочу получить что-то, где-то


так вот, не понятно "куда", "где" и как должен выглядить результат: type, rowtype, cursor, collection?

Это сообщение отредактировал(а) DimW - 4.8.2009, 16:18
PM MAIL ICQ   Вверх
LSD
Дата 4.8.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Это конечно извращение, но... smile
Код

select ... from ... where ... and :param = 28
union all
select ... from ... where ... and :param <> 28



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
DimW
Дата 4.8.2009, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(LSD @  4.8.2009,  16:58 Найти цитируемый пост)
но... 

ну да, и нужда в INTO отпала...  smile

ктаму же не понятно, резалты отличаются ко-вом полей и их типами.
PM MAIL ICQ   Вверх
Zloxa
Дата 4.8.2009, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(LSD @  4.8.2009,  16:58 Найти цитируемый пост)
Это конечно извращение, но... smile

Не такое уж, кстати, извращение

тестовая схема:
Код

create table t1 as select level c from dual connect by level <=100;
create table t2 as select level c from dual connect by level <=10000;

предварительно выполняем все запросы в холостую, чтобы хард парс не попал в статистику.
теперь читаем из первой таблицы, смотрим согласованные чтения:
Код

SQL> select * from t1;

100 rows selected.


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         10  consistent gets
          0  physical reads
          0  redo size
       2021  bytes sent via SQL*Net to client
        482  bytes received via SQL*Net from client
          8  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        100  rows processed

Теперь смотрим на "извращенческий" запрос:
Код

SQL> exec :v := 10;

PL/SQL procedure successfully completed.

SQL> select * from t1 where :v=10
  2  union all
  3  select * from t2 where :v!=10;

100 rows selected.


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         10  consistent gets
          0  physical reads
          0  redo size
       1678  bytes sent via SQL*Net to client
        482  bytes received via SQL*Net from client
          8  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        100  rows processed

теперь тоже самое для второй таблицы:
Код

SQL> exec :v := 20;

PL/SQL procedure successfully completed.

SQL> select * from t2;

10000 rows selected.


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        686  consistent gets
          0  physical reads
          0  redo size
     176822  bytes sent via SQL*Net to client
       7742  bytes received via SQL*Net from client
        668  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
      10000  rows processed

SQL> select * from t1 where :v=10
  2  union all
  3  select * from t2 where :v!=10;

10000 rows selected.


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        686  consistent gets
          0  physical reads
          0  redo size
     136879  bytes sent via SQL*Net to client
       7742  bytes received via SQL*Net from client
        668  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
      10000  rows processed



Вывод: Не смотря на то, что в плане аш два фуллскана, реально выполняется только один.
Помню где-то вычитывал об этом в доке, но ключевых слов для поиска не вспомнил, пришлось на пальцах показывать.
Сори за многабукв, если кому не интересно.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
cra6
Дата 4.8.2009, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.12.2007

Репутация: 2
Всего: 2



Недаром во всех учебниках пишут что там где можно обойтись  SQL ем PL/SQL пихать не следует.
Как вариант можна ещё попробывать decode или case   )) 
PM MAIL   Вверх
DimW
Дата 5.8.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Zloxa, не совсем понятно почему у тебя в примере статистики для "select * from t1" и селект с "union all" количество физических чтений равно 0. странно как то. при первом выполнении запроса данных ведь кеше нет, почему 0?

Цитата(Zloxa @  4.8.2009,  20:24 Найти цитируемый пост)
Вывод: Не смотря на то, что в плане аш два фуллскана, реально выполняется только один.

посмотрел статистику по кол-ву логических чтений в первом и во втором случае резы одинаковые ну тоесть действительно фул скан по одной таблице smile

кстати как правильно трактовать статистику по consistent gets в 9i что то его не наблюдаю уж очень он похож на session logical reads.

PM MAIL ICQ   Вверх
Zloxa
Дата 5.8.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(DimW @  5.8.2009,  10:30 Найти цитируемый пост)
транно как то. при первом выполнении запроса данных ведь кеше нет, почему 0?


Цитата(Zloxa @  4.8.2009,  20:24 Найти цитируемый пост)
предварительно выполняем все запросы в холостую, чтобы хард парс не попал в статистику.


Цитата(DimW @  5.8.2009,  10:30 Найти цитируемый пост)
в 9i что то его не наблюдаю 

Куда смотришь?  smile 
Код

Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production

SQL> set autot trace stat
SQL> select null from dual;


Статистика
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          3  consistent gets
          0  physical reads
          0  redo size
        403  bytes sent via SQL*Net to client
        499  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed




--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Zloxa
Дата 5.8.2009, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(DimW @  5.8.2009,  10:30 Найти цитируемый пост)
он похож на session logical reads.

session logical reads = consistent gets + db block gets


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
DimW
Дата 5.8.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(Zloxa @  5.8.2009,  10:39 Найти цитируемый пост)
Куда смотришь? 

да, не туда смотрел

Добавлено через 1 минуту и 8 секунд
Цитата(Zloxa @  5.8.2009,  11:03 Найти цитируемый пост)
session logical reads = consistent gets + db block gets

спасибо!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0878 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.