![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Нужно написать процедуру которая бы возвращала таблицу. Проблема в том что SQL запрос получается очень большим и превышает максимальную длинну varchar, и просто так его не выполнишь. Что делать?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
stron |
|
|||
![]() Консультант ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1654 Регистрация: 17.7.2003 Где: Питер Репутация: нет Всего: 36 |
Извиняюсь, но я что-то не понял.
Какой SQL запрос получается очень большим?(чего к чему) -------------------- подписи нет |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
В поцедуре нужно выполнить select и вернуть результат пользователю. Так вот строка для этого select-а превышает (вернеее может превышать в зависимость от базы и переданных параметров) размерность varchar и помещается только в CLOB, как выполнить такой запрос?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
maxi |
|
|||
Unregistered |
Мне кажется, что надо тебе запрос упростить. Наклевать каких - нить VIEWS, подзапросы, хостпеременные и т.д. Вообще я впервые встречаюсь с запросом, который бы превышал такое офигитительное ограничение.
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
В данном случае надо один столбес таблицы развернуть в несколько, по условию содержащемуся в других столбцах.
На данный момент работает такая схема: процедура на сервере генерирует запрос и в CLOB, возвращает его клиенту, тот выполняет его. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 1 Всего: 118 |
||||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
К сожалению нет
![]() Я не совсем четко сформулировал вначале задачу, из-за чего возникло недопонимание. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 1 Всего: 154 |
Если честно, я тоже никогда не сталкивался с запросами такого размера. Даже не знаю, что посоветывать. Ищите какой-то обходной путь, чтобы уменьшить размер запроса. Или обратитесь в корпорацию Oracle. Они внимательно относятся к своим клиентам.
-------------------- |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 1 Всего: 118 |
Читал, что Oracle8i и Oracle9i позволяют создавать "табличные функции". Эти функции возвращают результирующий набор данных и из него можно делать выборки.
Но я их не пробовал, потому только даю направление. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
А как они называются на английском (что бы можно было поискать)? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
AntonSaburov |
|
||||||||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 1 Всего: 118 |
Прямо с доки перекидаю пример - разбирайся ![]() 1. Определить вложенный табличный тип:
2. Создаем функцию, которая возвращает табличный тип.
3. Делаем запрос. Если внимательно по коду посмотреть, то по идее все ясно. Функция получает на входе папу и маму кроликов и возвращает список детей. Но одно НО - я не запускал этот пример реально ![]()
|
||||||||
|
|||||||||
igon |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 7 Всего: 21 |
Текст селекта разрезать на части приемлемой длины и передать их a1, a2...aN параметрам хранимой процедуры.
В хранимой execute immediate (a1|| a2||...||aN) -------------------- Хотите поговорить об этом? |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
igon
Не поможет, т.к. dynamic SQL не может превышать 32к. А именно это ограничение и надо преодолеть. Единственный выход это пакет DBMS_SQL, но я не могу понять как из него вытащить курсор. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
igon |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 7 Всего: 21 |
Ну не хе-хе себе - >32К!!!!
Это ж >= 15 страниц plain текста, причем плотного, без пустот и красоты!!! Я-то подумал, что ты вышел за лимит 4К. Слушай, это творение надо лицезреть - я как про легенду слышал про 4-страничные. Если это не коммерческая тайна - выложи куда-нить: очень любопытно посмотреть ![]() Может, и соображения появятся какие-нибудь. Так, если структура запроса постоянна и варьируют только параметры, можно отдельные подзапросы оформить как функции, например. Есть еще способ динамической генерации хранимой, ее компиляции и выполнения - вот это, чует мое сердце, тебе должно помочь. Правда, там используются прямые INSERT в SYS.SOURCE$ - не каждый DBA это одобрит.
Кстати, здесь все правильно? Что это за клиент, который выполняет то, что не по зубам серверу? Это сообщение отредактировал(а) igon - 8.12.2004, 05:54 -------------------- Хотите поговорить об этом? |
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 1 Всего: 64 |
А почему на поместить курсор в пакет и не использовать его? Что то наподобии этого:
Это сообщение отредактировал(а) <Spawn> - 8.12.2004, 21:25 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Oracle" | |
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Oracle | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |