powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Длиннная строковая переменная в процедуре ASE 12/15
8 сообщений из 8, страница 1 из 1
Длиннная строковая переменная в процедуре ASE 12/15
    #36039220
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Внутри процедуры хочу выполнить с помощью exec одним запросом длинную строку :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
begin

declare @query varchar( 16384 )
.....
exec (@query)
go

end
go
Однако длинны строки для запроса не хватает.
Какие решения можете предложить.
...
Рейтинг: 0 / 0
Длиннная строковая переменная в процедуре ASE 12/15
    #36039253
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напиши хранимую процедуру.
...
Рейтинг: 0 / 0
Длиннная строковая переменная в процедуре ASE 12/15
    #36040816
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эти строки как раз и расположены внутри процедуры, а exec возвращает результирующий резалтсет.
...
Рейтинг: 0 / 0
Длиннная строковая переменная в процедуре ASE 12/15
    #36040898
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А long varchar не подойдет? Или ASE exec разрешает максимум 16384? Если так, то никак не обойти.
...
Рейтинг: 0 / 0
Длиннная строковая переменная в процедуре ASE 12/15
    #36041089
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JenyaD wrote:

> declare @query varchar(16384)
> exec (@query)

> Однако длинны строки для запроса не хватает.
> Какие решения можете предложить.

Никаких решений нет. 16384 - это максимум, больше него нельзя.
Переменную типа text в TSQL создать невозможно, а varchar длиннее быть
не может (заметьте, что 16384 символов можно хранить ТОЛЬКО В ПАМЯТИ,
в таблице это число ещё более ограничено размером страницы базы данных).

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Длиннная строковая переменная в процедуре ASE 12/15
    #36041264
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогло :
Код: plaintext
exec(@str0 + @str1 + @str2 + ' order by 1,2')

Однако при большом (около 100) количестве столбцов ORDER BY перестаёт работать.
Без сообщений об ошибке.


Adaptive Server Enterprise/15.0.2/EBF 15652 ESD#4/
...
Рейтинг: 0 / 0
Длиннная строковая переменная в процедуре ASE 12/15
    #36041538
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому наверно и не работает, что строка обрезается по первым 16384 символам. Видимо сам запрос остается работоспособным и без отрезанного хвоста.
Про процедуру было предложение, чтобы уменьшить длину строки. Т.е. чтобы в exec было написан не сам запрос, а "call sp_proc()", и вот в этой sp_proc и напишите дикие селекты...
...
Рейтинг: 0 / 0
Длиннная строковая переменная в процедуре ASE 12/15
    #36041984
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JenyaDЭти строки как раз и расположены внутри процедуры, а exec возвращает результирующий резалтсет."результирующий резалтсет" это тавтология.

Не надо конструировать длинные селекты. Лучше сделать хранимую процедуру с навороченой логикой. Что-нибудь в духе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create procedure test @report_type char( 1 ), @date1 datetime, @date2 datetime, @param_string1 char( 10 )
as
   if @report_type = 'A'
      select f1, f2, f3 from table1 where date_field between @date1 and @date2

   else if @report_type = 'B'
      select f1, f2, f3, .... f100 from table1 where code_field=@param_string1 order by f1, f5
   
   else
       select "bad report type"
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Длиннная строковая переменная в процедуре ASE 12/15
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]