Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Select from ( функция которая возвращает строку) /10g [D7]


tytus ©   (2008-03-20 18:28:00) 

Доброго дня всем. Есть  ф-я которая возвращает строку
' 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 - дает вышеописанную строку.
Как мне исправить сию проблему?


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


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

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


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

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


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

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


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

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


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

>Правильный_Вася   (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-20 20:48:00) [6]

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

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

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


Reindeer Moss Eater   (2008-03-20 18:54:00) [7]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо