powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Запрос с параметрами в Централ
8 сообщений из 8, страница 1 из 1
Запрос с параметрами в Централ
    #33711864
Евгений_СТ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробую в Централе выполнить запрос с параметрами:

Код: plaintext
select * from v_LSCHET where PLAT_FAM like :aaa;

на что он мне отвечает: ISQL Error, "Not enough values for host variables". Хотя этот же самый запрос нормально выполняется из клиентской программы. Может быть, в Централе запросы с параметрами вообще не разрешены? В документации что-то ничего на эту тему не могу найти.
...
Рейтинг: 0 / 0
Запрос с параметрами в Централ
    #33711868
Евгений_СТ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чуть не забыл.

АСА 9.0.2.2451
Централ 4.3.0.2387
...
Рейтинг: 0 / 0
Запрос с параметрами в Централ
    #33711875
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну во первых Вы не в Central, а ISQL судя по ошибке пытаетесь выполнить запрос (вообще то это разные программы). Во вторых непонятен вопрос про параметры, что конкретно Вы хотите - то ли создать повторно используемый запрос/код в виде хранимой процедуры, то ли просто написать себе повторно используемый параметризованных скрипт для ISQL, чтобы обеспечить себя шаблонами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
/*
Процедура, которая может вызываться с любого места БД и клиентской части
*/
CREATE PROCEDURE sp_get_LSCHET (
  IN @aaa char( 250 )
)
BEGIN
  select * from v_LSCHET where PLAT_FAM like @aaa;
END;

// Вызов процедуры:
SELECT *
FROM sp_get_LSCHET ('%ASA%');

/*
Шаблон LSCHET_LIKE.SQL, который можно вызывать только из под ISQL
*/
PARAMETERS aaa;

select * from v_LSCHET where PLAT_FAM like '{aaa}';

// Вызов шаблона в ISQL
READ LSCHET_LIKE.SQL [%ASA%]

P.S. Не нужно путать клиентское приложение и серверную часть. Когда Вы на клиенте описываете в запросе параметр :aaa, то Вы тем самым фактически заставляете во время выполнения запроса драйвер доступа поменять вместо :aaa на установленное значение (фактически отпарсить текст запроса) и послать на сервер для выполнения (что кстати полностью аналогично шаблону ISQL). Когда же Вы описываете параметр хранимой процедуры, то Вы описываете реальную переменную, которую можно полноценно использовать в коде хранимой процедуры.
...
Рейтинг: 0 / 0
Запрос с параметрами в Централ
    #33711904
Евгений_СТ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASCRUSНу во первых Вы не в Central, а ISQL судя по ошибке пытаетесь выполнить запрос (вообще то это разные программы).
Посып а ю голову раскалённым пеплом. Блин, даже и не подумал, что это не одна программа. Потом вспомнил, что ЕХЕ-шники разные! Там ещё и С-шный экзешник лежит. Точно.

ASCRUSВо вторых непонятен вопрос про параметры, что конкретно Вы хотите - то ли создать повторно используемый запрос/код в виде хранимой процедуры, то ли просто написать себе повторно используемый параметризованных скрипт для ISQL, чтобы обеспечить себя шаблонами:
Нет, я просто веду отладку запросов. Хранимая процедура тут абсолютно не причём. В клиентском приложении запрос с параметром выглядит именно так, как я его привёл в первом сообщении.

Скопировал его в ИСКЛ и попытался запустить, тут-то и получил сообщение об ошибке. Просто в той СУБД, с которой я работал раньше, запросы с параметрами работали совершенно одинаково и из клиента, и из административной консоли (аналога ИСКЛ). То есть я сперва полностью отлаживал запрос в консоли, а потом просто копировал его в приложение.

Выходит, в ИСКЛ такой метод не проходит, можно пользоваться только оператором PARAMETERS. Почитал его описание - он может быть использован только в скрипте. Не очень удобно получается - сперва пишем отдельный скрипт, отлаживаем, а потом заменяем все параметры {aaa} на :aaa для того, чтобы вставить отлаженный скрипт в клиентскую программу.

ASCRUSP.S. Не нужно путать клиентское приложение и серверную часть. Когда Вы на клиенте описываете в запросе параметр :aaa, то Вы тем самым фактически заставляете во время выполнения запроса драйвер доступа поменять вместо :aaa на установленное значение (фактически отпарсить текст запроса) и послать на сервер для выполнения (что кстати полностью аналогично шаблону ISQL).
Так почему бы ИСКЛ не подставлять точно так же фактическое значение вместо параметра :aaa ? Какой смысл заложен в отказе от поддержки такого синтаксиса?
...
Рейтинг: 0 / 0
Запрос с параметрами в Централ
    #33711920
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений_СТВыходит, в ИСКЛ такой метод не проходит, можно пользоваться только оператором PARAMETERS. Почитал его описание - он может быть использован только в скрипте. Не очень удобно получается - сперва пишем отдельный скрипт, отлаживаем, а потом заменяем все параметры {aaa} на :aaa для того, чтобы вставить отлаженный скрипт в клиентскую программу.
Я бы сказал, в ISQL PARAMETERS все таки не для отладки, а именно шаблонов сделан - и это очень удобно. К примеру, у нас есть серия однотипных триггеров - делаем шаблон с параметром имени таблицы с CREATE TRIGGER и при вызове шаблона с ISQL сразу на указанную таблицу получаем сгенерированный триггер. Для отладки же клиентских запросов согласен - не подходит.

Евгений_СТТак почему бы ИСКЛ не подставлять точно так же фактическое значение вместо параметра :aaa ? Какой смысл заложен в отказе от поддержки такого синтаксиса?
Ну а кто мешает то на своем же средстве построения клиентских приложений написать небольшую утилитку, в которой можно написать или вставить с буфера запрос, занести его параметры, выполнить и отладить через тот же драйвер доступа, что и используется в клиентском приложении ? Поэтому это будет даже правильнее.
...
Рейтинг: 0 / 0
Запрос с параметрами в Централ
    #33711928
Евгений_СТ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за разъяснения! Теперь стало понятнее, для чего всё это нужно.

ASCRUSНу а кто мешает то на своем же средстве построения клиентских приложений написать небольшую утилитку
Так это же делать надо... :)
...
Рейтинг: 0 / 0
Запрос с параметрами в Централ
    #33712173
Vlad_5181
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ааа заменяется в isql реальным значением, проверяется работа скрипта. Если работает на значении 24, будет работать и на 25 и на 26....
Походу отслеживаются результаты выборки и тестируется логика - должен в итоге быть такой набор результатов или в коде баг.
...
Рейтинг: 0 / 0
Запрос с параметрами в Централ
    #33714266
Евгений_СТ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vlad_5181ааа заменяется в isql реальным значением, проверяется работа скрипта. Если работает на значении 24, будет работать и на 25 и на 26....
Не всегда. У меня достаточно много запросов, завязанных на диапазоны дат. А самое главное - если в запросе это самое значение "25" должно быть указано в 4-5 местах? Тогда при тестировании со значением "26" я должен буду вручную менять его по всему тексту запроса.

Наверное, всё-таки удобнее будет в целях отладки вставлять в запрос вместо :aaa локальную переменную @aaa.

Код: plaintext
1.
2.
create variable @aaa char( 20 );
set @aaa = 'ИВАНОВ%';
select * from LSCHET where PLATFFAM like @aaa;
а потом менять её на параметр запроса.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Запрос с параметрами в Централ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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