Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1243571350
сергей
2009-05-29 08:29
2009.07.26
DriverComboBox


2-1243738366
Нет имени
2009-05-31 06:52
2009.07.26
GDI и GDI+


2-1243592137
Алик
2009-05-29 14:15
2009.07.26
Описание массива с изменяющимся размером элемента данных


2-1243850262
Максим
2009-06-01 13:57
2009.07.26
TMenuItem


15-1242940174
DillerXX
2009-05-22 01:09
2009.07.26
О теме КПК





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский