Isql и русские буквы
Isql и русские буквы
Почему не работает следующий скрипт:
SET NAMES WIN1251;
update global_edizm
set global_edizm_name = 'га'
where global_edizm_name = 'га1';
select * from global_edizm order by global_edizm_name;
exit;
Выдается знаменитое Cannot transliterate character between character sets
Но если строку с where заменить на
where global_edizm_name = _win1251'га1';
то все проходит нормально.... Причем это связано только с where...
И еще постоянно выдается:
Expected end of statement, encountered EOF
Что это значит?
Может есть другая альтернатива? Хочется иметь маленькую утилитку (консольное приложение) для обновления баз у клиентов просто пересылая им sql-скрипты. Хотел обойтись стандартными средствами, может посоветуете что-нибудь другое? Не хочется давать им в руки какое-нибудь Gui-приложение, чтоб по базе не шастали...
SET NAMES WIN1251;
update global_edizm
set global_edizm_name = 'га'
where global_edizm_name = 'га1';
select * from global_edizm order by global_edizm_name;
exit;
Выдается знаменитое Cannot transliterate character between character sets
Но если строку с where заменить на
where global_edizm_name = _win1251'га1';
то все проходит нормально.... Причем это связано только с where...
И еще постоянно выдается:
Expected end of statement, encountered EOF
Что это значит?
Может есть другая альтернатива? Хочется иметь маленькую утилитку (консольное приложение) для обновления баз у клиентов просто пересылая им sql-скрипты. Хотел обойтись стандартными средствами, может посоветуете что-нибудь другое? Не хочется давать им в руки какое-нибудь Gui-приложение, чтоб по базе не шастали...
Не пойму я вас, Прохоровых (С). Если речь об скрипте, то командная строка вызывает isql с заданием его выполнить. Ну а унутре этого скрипта уже строка c SET NAMES идёт до строки c CONNECT, и фсё. А если об интерактивной работе, то то же самое - вызвал isql, задал SET NAMES, выполнил коннект и работай. Что вам занадобилось от командной строки-то...
У меня действительно со временем могут измениться параметры коннекта, о которых я могу своевременно не узнать, поэтому изначально хотел скрипты с обновлениями сделать контекстно-независимыми, но поскольку этого сделать нельзя, то проблему решу более детализированным и регламментированным описанием использования этих скриптов.kdv писал(а):он юзерам хочет, значит строка коннекта у него может быть разная. а как он ее формирует - фиг знает.
Всем спасибо, вопрос снят.
Я работаю в Linux и там такой проблемы нет. Пишем скрипт примерно такого содержания:
#!/bin/sh
DATABASE=$1
USERNAME=$2
PASSWORD=$3
/opt/interbase/bin/isql << MYEND
SET NAMES ...;
CONNECT '${DATABASE}' USER '${USERNAME}' PASSWORD '${PASSWORD}';
SELECT .... ;
...
...
EXIT;
MYEND
#Окончание скрипта
Сохраняю файл с именем isql.sh, делаю его исполняемым и усе... Запуск - первый параметр имя базы данных, второй - юзер, третий пароль. Если роль нужна или скрипт сделать более крутым (проверка ввели данные или нет, правильность и т.д. это если надо, дописать не проблема)
Ошибку выдает потому, что в последней строке нет символа окончания строки. Скрипт прочитал команду EXIT, но не выполнил ее - типа не нажали на ENTER.
#!/bin/sh
DATABASE=$1
USERNAME=$2
PASSWORD=$3
/opt/interbase/bin/isql << MYEND
SET NAMES ...;
CONNECT '${DATABASE}' USER '${USERNAME}' PASSWORD '${PASSWORD}';
SELECT .... ;
...
...
EXIT;
MYEND
#Окончание скрипта
Сохраняю файл с именем isql.sh, делаю его исполняемым и усе... Запуск - первый параметр имя базы данных, второй - юзер, третий пароль. Если роль нужна или скрипт сделать более крутым (проверка ввели данные или нет, правильность и т.д. это если надо, дописать не проблема)
Ошибку выдает потому, что в последней строке нет символа окончания строки. Скрипт прочитал команду EXIT, но не выполнил ее - типа не нажали на ENTER.