Форум: "Прочее";
Текущий архив: 2009.07.26;
Скачать: [xml.tar.bz2];
ВнизВопрос знатокам 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c