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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с connect by prior... Не выполняется запрос... 
:(
    Опции темы
Vas
Дата 9.3.2006, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Добрый день. Подскажите, пожалуйста, как можно использовать в одном запросе JOIN's и CONNECT BY PRIOR?
Код

SELECT an.num_device, ad.id, ad.id_parent, ad.id_device, ad.name
FROM all_devices ad, ats_number an
WHERE ad.id_device=an.id(+) 

Если сюда добавить connect by, то запрос не выполняется, пробовал его делать вложенным результат "0" smile


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Vas
Дата 10.3.2006, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Мужики ткните носом куда копать. Пробовал view создавать из запроса та же ошибка
Код

ORA-01437: cannot have join with CONNECT BY

Добавлено @ 10:53
Во что нашел smile
Код

A join operation was specified with a CONNECT BY clause. If a CONNECT BY clause is used in a SELECT 
statement for a tree-structured query, only one table may be referenced in the query.



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
LSD
Дата 10.3.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Ну там же написано, что только одна таблица может присутсвовать в запросе с CONNECT BY, а в JOIN запросе их как минимум две.

Если очень надо, то попробуй создать вьюер на JOIN, а по нему уже делать CONNECT BY.


--------------------
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   Вверх
Vas
Дата 10.3.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Цитата(LSD @ 10.3.2006, 11:05 Найти цитируемый пост)
Если очень надо, то попробуй создать вьюер на JOIN, а по нему уже делать CONNECT BY

Пробовал создавать вьювер из приведенного мной запроса, а потом делать из него запрос с CONNECT BY эффект тот же. Придется наверное использовать временную таблицу или может еще как-нибудь можно ?


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
LSD
Дата 10.3.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(Vas @ 10.3.2006, 11:31 Найти цитируемый пост)
Придется наверное использовать временную таблицу или может еще как-нибудь можно ?

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

P.S. Можешь выложить скрипты по созданию табличек, и описание запроса, который ты пытаешься выполнить.


--------------------
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   Вверх
Vas
Дата 12.3.2006, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Цитата(LSD @ 10.3.2006, 13:52 Найти цитируемый пост)
Можешь выложить скрипты по созданию табличек, и описание запроса, который ты пытаешься выполнить.

Описание запроса следущее, нужно выбрать в виде ветки все устройства из таблицы all_devices причем и показать номер устройства из таблицы num_devices. Таблы связаны внешним ключом.
Вот таблицы:
Код

create table num_devices
(id number primary key,
num_device varchar2(10))
/
insert into num_devices values(1, '11111')
/
insert into num_devices values(2, '22222')
/
insert into num_devices values(3, '33333')
/
insert into num_devices values(4, '44444')
/
insert into num_devices values(5, '55555')
/
insert into num_devices values(6, '66666')
/
insert into num_devices values(7, '77777')
commit
/
create table all_devices
(id number primary key,
id_parent number,
foreign key (id_parent) references all_devices on delete set null,
id_device number,
foreign key (id_device) references num_devices,
name varchar2(50))
/
insert into all_devices values(1, null, 1, 'Главная')
/
insert into all_devices values(2, 1, 2, 'Подчиненная 1')
/
insert into all_devices values(3, 2, 3, 'Подчиненная 2')
/
insert into all_devices values(4, 1, 4, 'Подчиненная 3')
/
insert into all_devices values(5, null, 5, 'Главная')
/
insert into all_devices values(6, 5, 6, 'Подчиненная')
/
insert into all_devices values(7, 5, 1, 'Подчиненная 2')
/
commit
/

А вот запрос:
Код

SELECT an.num_device, ad.id, ad.id_parent, ad.id_device, ad.name
FROM all_devices ad, ats_number an
WHERE ad.id_device=an.id(+) 



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
LSD
Дата 12.3.2006, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



У меня все работает как с view, так и с подзапросом. Запрос
Код
select id, id_parent, num_device, id_device, LPAD('    ',2*(LEVEL - 1)) || name name
  from
  (
    SELECT nd.num_device, ad.id, ad.id_parent, ad.id_device, ad.name
      FROM all_devices ad, num_devices nd
      WHERE ad.id_device=nd.id(+)
  )
  start with id_parent is null
  connect by prior id = id_parent

возвращает:
Код
 ID  ID_PARENT NUM_DEVICE  ID_DEVICE NAME              
--- ---------- ---------- ---------- ------------------
  1            11111               1 Главная           
  2          1 22222               2   Подчиненная 1   
  3          2 33333               3     Подчиненная 2 
  4          1 44444               4   Подчиненная 3   
  5            55555               5 Главная           
  7          5 11111               1   Подчиненная 2   
  6          5 66666               6   Подчиненная     


P.S. Я проверял на 10g.


--------------------
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   Вверх
Vas
Дата 13.3.2006, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Цитата(LSD @ 12.3.2006, 23:32 Найти цитируемый пост)
P.S. Я проверял на 10g.

А на 8.1.7 не хотит smile
Код

SQL> select id, id_parent, num_device, id_device, LPAD('    ',2*(LEVEL - 1)) || name name
  2    from
  3    (
  4      SELECT nd.num_device, ad.id, ad.id_parent, ad.id_device, ad.name
  5        FROM all_devices ad, num_devices nd
  6        WHERE ad.id_device=nd.id(+)
  7    )
  8    start with id_parent is null
  9    connect by prior id = id_parent
 10  /
      FROM all_devices ad, num_devices nd
           *
ERROR at line 5:
ORA-01437: cannot have join with CONNECT BY



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
LSD
Дата 14.3.2006, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Сегодня проверил на 9-ке, тоже работает. На восьмерке смогу глянуть, только через пару дней.


--------------------
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   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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