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

Вниз

Select from ( функция которая возвращает строку) /10g   Найти похожие ветки 

 
tytus   (2008-03-20 18:28) [0]

Доброго дня всем. Есть  ф-я которая возвращает строку
" SELECT * FROM PCMD_MAIN PARTITION(PART_010308)  order by CALL_START_TIME "

затем, я использую эту функцию в хранимке, примерно таким способом:
stmt:=" select поле1, поле 2.... поле N "||+
" from (моя функция)*** a, таблица_1 b. таблица_2 c "||+
" where a_поле=b_поле "||+
" and b_поле=c_поле ";
затем dbms_sql.parse(cur,stmt,dbms_sql.native);
и так далее.
Так вот, ежели в строке *** написать строку приведенную в начале, то все работает, ежели как функцию - то нет.
Ругается что (пропущена правая скобка ...???!!!)

Хотя запрос
select Моя_Функция from Dual - дает вышеописанную строку.
Как мне исправить сию проблему?


 
Reindeer Moss Eater ©   (2008-03-20 18:54) [1]

dbms_sql?
и это в наше-то время?


 
Правильный_Вася   (2008-03-20 20:48) [2]

если твоя функция возвращает строку, а не набор данных, то это работать не будет

> dbms_sql?и это в наше-то время?

иногда очень удобно
у Кайта подробно разобрано, в каких случаях дин. sql лучше через этот пакет, а в каких - через execute immediate


 
tytus   (2008-03-21 09:01) [3]

>Правильный_Вася   (20.03.08 20:48) [2]
Подобное я содрал с одного проекта, еще для Oracle 8i, и там такой "финт " работал нормально. Только текст самой ф-ции не помню, но то, что она возвращала строку - это 100%. А набор данных тут, имхо, непричем, потому как просто формируется строка stmt, которая затем парсится... И если -бы нужен был набор данных - то оракл заругался-бы по-другому...
А смысл этого -прост. Есть таблица с разделами по диапазону, равному одному месяцу. Так, PART_0108 - это за янвырь, PART_0208 - за февраль и так далее. А функция должна возвратить след.:

select * from Таблица Partition (PART_0102)
union all --это ежели больше одного месяца
select * from Таблица Partition (PART_0103)

И потом сей текст вставить в строку stmt. Так вот, как уже было сказано, просто текст работает, а через функцию - нехочет...


 
Правильный_Вася   (2008-03-21 09:12) [4]

потому что нельзя сделать выборку из строки
если тебе так хочется динамический скл, то
"from (" || моя_функция || ") a, таблица_1 b. таблица_2 c " ||


 
tytus   (2008-03-21 10:13) [5]

>Правильный_Вася   (21.03.08 09:12) [4]
Вот это - то что надо... Просто была есче ошибка, она меня с толку сбила,
а твой вариант подошел. Спасибо.
Спасибо всем.


 
Кщд   (2008-03-21 14:31) [6]

>tytus   (21.03.08 09:01) [3]
очень хотелось бы увидеть рабочий пример select from str
пусть и под 8-ку)


 
Правильный_Вася   (2008-03-21 14:37) [7]


> очень хотелось бы увидеть рабочий пример select from str

он не понимает разницы между SQL и строкой, которая будет исполняться как SQL, будучи собранной из кусочков



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

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

Наверх




Память: 0.48 MB
Время: 0.01 c
2-1218434218
Mops
2008-08-11 09:56
2008.09.21
TWebbrowser и IE


15-1217268666
@!!ex
2008-07-28 22:11
2008.09.21
Защита от компирования.


2-1218176634
Int23
2008-08-08 10:23
2008.09.21
Как найти причину ошибки "Недос-но памяти для обработки команды"


15-1217229884
No_Dead (work)
2008-07-28 11:24
2008.09.21
Вопрос к опытным сис. админам


11-1193561717
files32
2007-10-28 11:55
2008.09.21
Русский язык KOL+Lazarus+WinCE