Главная страница
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.015 c
2-1217913860
lewka
2008-08-05 09:24
2008.09.21
Размер HTML- кода (трафик)


11-1193583248
Vladimir Kladov
2007-10-28 17:54
2008.09.21
Версия 2.84


2-1218437805
fulkon
2008-08-11 10:56
2008.09.21
Диалог выбора директории


1-1198155538
андр
2007-12-20 15:58
2008.09.21
Передача параметров


2-1218439239
начинающий
2008-08-11 11:20
2008.09.21
Журнал документов