Текущий архив: 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