Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.07.26;
Скачать: CL | DM;

Вниз

Вопрос знатокам oracle   Найти похожие ветки 

 
makvell   (2009-05-21 12:10) [0]

Всем доброго времени суток!

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

Можно ли сделать запрос "select что-то as id from (тут этот запрос)" ?

Т.е. нужно добавить алиас неизвестно к чему :) Есть шанс?


 
Sergey13 ©   (2009-05-21 12:21) [1]

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

1.
> from (тут этот запрос)"
Вместо "тут этот запрос" будет вставляться реальный запрос? Тогда что значит к нему нет доступа? Как тогда вставляться то будет?

2.
> нужно добавить алиас неизвестно к чему

А зачем? В датасете можно же обратиться по номеру поля.


 
makvell   (2009-05-21 12:29) [2]

1 "тут этот запрос" - о нем известно только, что он возвращает один столбец, все, что там за запрос не известно :)

2 это не совсем дельфи, точнее совсем не... и задача именно в том, чтобы сделать алиас.

Задача такая попалась совершенно случайно, т.е. мне просто интересно, это вообще можно сделать или нет. Без относительно датасетов, ресалтсетов и т.п., допустип просто в pl/sql developere.


 
Skyle ©   (2009-05-21 12:31) [3]

Неужели в оракле нет никакого профайлера, который позволяет отловить этот запрос? И неужели в оракле нет никакого клиента, который позволяет этот запрос выполнить и посмотреть результат?


 
makvell   (2009-05-21 12:36) [4]

Эммм... я вроде описал все :)

Запрос там не всегда один и тот же, любой... много, но каждый из них всегда возвращает один столбец. Все. больше ничего не дано :)


 
makvell   (2009-05-21 12:36) [5]

Что интересно, в постгресе это можно сделать легко...


 
Sergey13 ©   (2009-05-21 12:58) [6]

> [2] makvell   (21.05.09 12:29)
> о нем известно только, что он возвращает один столбец, все,
> что там за запрос не известно

Для его выполнения этого мало. Как ты собираешься его выполнять то?


 
makvell   (2009-05-21 13:03) [7]

Эммм... это описание.

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


 
Вариант   (2009-05-21 13:19) [8]


> makvell   (21.05.09 12:10)  

Не знаток этой темы (SQL и оракла в частности), и мне кажется что это не совсем верно так ставить задание.. но тем не менее вариант:
Нам  нужен алиас поля. Что если алиас дать исскуственно? То есть добавить одну пустую запись к запросу с помощью

UNION ALL

типа

select CNT from
(
SELECT NULL as CNT from dual
UNION ALL
SELECT что-то  FROM ЧЕГО_ТО
) AS MyResult

где
SELECT NULL as CNT - наша приставка для формирования алиаса поля

SELECT что-то  FROM ЧЕГО_ТО - это откуда надо получить интерисующие данные


 
Sergey Masloff   (2009-05-21 13:22) [9]

Так запрос тебе текстом передают чтоли?
open cursor и fetch и будет тебе счастье.


 
makvell   (2009-05-21 13:33) [10]


> Вариант   (21.05.09 13:19) [8]


Спасибо, это интересный вариант :)


 
Паша   (2009-05-21 14:05) [11]

мне кажется, надо смотреть в сторону execute immediate, ежели запрос в тексте. а курсор тут как бы не поможет.


 
Sergey Masloff   (2009-05-21 14:39) [12]

Курсор тут как бы поможет ;-)

declare
 TYPE TAnyCur IS REF CURSOR;
 cur TAnyCur;
 vValue varchar(20);
 DSqlStr  varchar2(4000);
begin
 DSqlStr := "select dummy from dual";
 open cur FOR DSqlStr;
 FETCH cur INTO vValue;
 close cur;
 dbms_output.put_line(vValue);
end;


превратить в процедуру где DSqlStr параметр 1 минута


 
Sergey Masloff   (2009-05-21 14:40) [13]

Естественно код [12] намеренно упрощен всякие sql%found exception и др. пропущены


 
Паша   (2009-05-21 15:16) [14]


> Sergey Masloff   (21.05.09 14:39) [12]

хех. интересный подход, не знал, что так можно... в смысле, что конструкция open FOR такие вещи выдает. все больше в нее обычный select подставлял. надо же!


 
Fantasist.   (2009-05-21 17:59) [15]


> Вариант   (21.05.09 13:19) [8]


 Класс! Задачу в указанной постановке отлично решает!


 
makvell   (2009-05-21 18:19) [16]

Угу, только при этом добавляет еще одну запись, которую придется фильтровать, да и union, емнип, весьма затратное дело :) Но все равно спасибо, любопытство удовлетворено.


 
Игорь Шевченко ©   (2009-05-21 19:53) [17]


> доступа к запросу нет


Тогда никак. Или ты чего-то недоговариваешь


 
Sergey13 ©   (2009-05-22 08:12) [18]

> [16] makvell   (21.05.09 18:19)
> Угу, только при этом добавляет еще одну запись

SELECT NULL as CNT from dual where 1=0
должно вроде помочь.

> да и union, емнип, весьма затратное дело

Union да, union all - поменьше.



Страницы: 1 вся ветка

Текущий архив: 2009.07.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
2-1244023953
andzav
2009-06-03 14:12
2009.07.26
Из DataTimePicker вставляется в поле не только дата, но и время


2-1243428554
Mishenka
2009-05-27 16:49
2009.07.26
Как отловить событие закрытия ToolBar a ?


15-1242860892
Иксик
2009-05-21 03:08
2009.07.26
Как зарегистрировать торговую марку в России?


15-1242938302
Юрий
2009-05-22 00:38
2009.07.26
С днем рождения ! 22 мая 2009 пятница


11-1204046814
andreil
2008-02-26 20:26
2009.07.26
Как быстро сравнить два файла?