powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема с input into... в ASA9.0.2
11 сообщений из 11, страница 1 из 1
Проблема с input into... в ASA9.0.2
    #33024240
dp_tnd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется ASA 9.0.2 билд на память не помню, кажется 2542, но это не существенно. Эффект поторяется на всех билдах и был замечен еще на 7 и 8 версиях.

В скрипте исполняемом запуском по расписанию dbisqlc требуется импортировать данные из файла dbf. Импорт нужно сделать во временную таблицу, которая объявляется в самом скрипте:

DECLARE LOCAL TEMPORARY TABLE t_data(
o_dat date,
sum numeric(12,2),
comm varchar(512)
) not transactional;

input into t_data from aaa.dbf format DBASEIII by order;

Порядок и число полей, типы данных соответствуют.

Теперь собственно проблема:
- если input делает юзер, не имеющий статуса creator, то возникает ошибка - "нет прав на создание таблицы".

- если input делает DBA, то получаем собщение - "таблица уже существует".

Согласно BOL, при исполнении INPUT для форматов типа dBASE, если целевой таблицы нет, она создается, если есть - данные льются в нее.

Дать юзеру-импортеру права на создание таблиц нельзя по условиям безопасности - ему зарезано все, кроме коннекта и вызова нескольких SP, которые и делают отстальную работу.

Если импорт делается из форматов ASCII, FIXED и т.п., то проблем не возникает.

Может быть кто уже боролся с такими проблемами.
...
Рейтинг: 0 / 0
Проблема с input into... в ASA9.0.2
    #33026358
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dp_tndИмпорт нужно сделать во временную таблицу, которая объявляется в самом скрипте:

DECLARE LOCAL TEMPORARY TABLE t_data(
o_dat date,
sum numeric(12,2),
comm varchar(512)
) not transactional;

input into t_data from aaa.dbf format DBASEIII by order;

Глупый наверное вопрос, но все же: А ты все эти команды в блок begin/end положить не пробовал? А в конце блока можно делать принудительное удаление временной таблицы. И вообще по описанию задачи я не вижу, почему бы не создать один раз глобальную временную таблицу. Намного проще будет работать.

У меня впрочем еще с ASA6 вполне работают скрипты написаные вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
   create table #t( ..... );
   input into #t from aaa.dbf format DBASEIII by order;
   // some other work
   drop table #t;

   create table #t( other set of fields );
   input into #t from bbb.dbf format DBASEIII by order;
   // some other work
   drop table #t;  // Последний drop не обязателен, но можно сделать :)
end;
Ни разу не встречал проблем.
...
Рейтинг: 0 / 0
Проблема с input into... в ASA9.0.2
    #33026618
dp_tnd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlГлупый наверное вопрос, но все же: А ты все эти команды в блок begin/end положить не пробовал?


Пробовал. Не помогло :( Но попробую еще разок. Проблема именно с local temporary table

White Owl
А в конце блока можно делать принудительное удаление временной таблицы. И вообще по описанию задачи я не вижу, почему бы не создать один раз глобальную временную таблицу. Намного проще будет работать.


Есть несколько ограничений :
1.Процедура импорта происходит регулярно и часто, а я не уверен, что постоянное создание/дропанье base таблиц благосклонно воспримется сервером.

2.Структура исходных данных может меняться, и пересоздавать/править глобальную временную таблицу сложно организационно. А так, я присылаю поправленный скрипт и все работает дальше. И мне ехать никуда не нужно :).

3.Иногда требуется повторная загрузка старых данных - для этого случая есть архив скриптов импорта.

4.Импорт выполняется запуском батника по расписанию или ручками, значит нужно явно прописать пароль. Поэтому сделан спец пользователь, который имеет право только на исполнение нескольких SP, которые подготовленные данные толкают дальше в систему.

White Owl
У меня впрочем еще с ASA6 вполне работают скрипты написаные вот так:
Код: plaintext
1.
2.
3.
4.
begin
   create table #t( ..... );
   input into #t from aaa.dbf format DBASEIII by order;
end;


Не годится, т.к. по условиям игры импорт делается от имени лишенца - create table #t( ..... ) ему, увы, запрещен.
...
Рейтинг: 0 / 0
Проблема с input into... в ASA9.0.2
    #33026970
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В DB2 можно в было упрятать создание таблицы в ХП и дать права на выполнение. Тогда user мог создать таблицу выполнив ХП даже не имея прав на create table. Может здесь возможен такой фокус?
...
Рейтинг: 0 / 0
Проблема с input into... в ASA9.0.2
    #33028527
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dp_tnd1.Процедура импорта происходит регулярно и часто, а я не уверен, что постоянное создание/дропанье base таблиц благосклонно воспримется сервером.
Ну вообще-то, "declare local temporary table aaa" и "create table #aaa" абсолютно идентичны :) И в том и в другом случае создается таблица принадлежащая сессии и она автоматически убивается по завершению сессии.
А насчет частоты создания/удаления временных таблиц - точно говорю, никаких проблем нету :)

dp_tnd2.Структура исходных данных может меняться, и пересоздавать/править глобальную временную таблицу сложно организационно. А так, я присылаю поправленный скрипт и все работает дальше. И мне ехать никуда не нужно :).
Это единственный серьезный аргумент против глобальных временных таблиц. Но если меняются исходные таблицы.... может имеет смысл наваять внешний конвертор данных? Который бы автоматически подстраивался под новый набор колонок?

dp_tndпо условиям игры импорт делается от имени лишенца - create table #t( ..... ) ему, увы, запрещен.
Вот как раз "create table #t()" разрешен всем. Диез перед именем таблицы это специальный символ определяющий в ASA таблицу как временную. Живущую только на переиод текущей сессии или пока ее не дропнут вручную внутри сессии. Твой "лишенец" не сможет сделать "create table t(); drop table t;", но сможет "create table #t(); drop table #t;" :)
...
Рейтинг: 0 / 0
Проблема с input into... в ASA9.0.2
    #33028548
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
golsaВ DB2 можно в было упрятать создание таблицы в ХП и дать права на выполнение. Тогда user мог создать таблицу выполнив ХП даже не имея прав на create table. Может здесь возможен такой фокус?
Да, конечно. Хранимые процедуры в ASA всегда испольняются под правами владельца этой самой хранимой процедуры. Но в данном случае это не нужно :)
...
Рейтинг: 0 / 0
Проблема с input into... в ASA9.0.2
    #33029029
dp_tnd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl
Ну вообще-то, "declare local temporary table aaa" и "create table #aaa" абсолютно идентичны :) И в том и в другом случае создается таблица принадлежащая сессии и она автоматически убивается по завершению сессии.
А насчет частоты создания/удаления временных таблиц - точно говорю, никаких проблем нету :)

Это я протормозил - # не заметил :-)
Но если операторы
Код: plaintext
1.
declare local temporary table aaa(...) 
и
Код: plaintext
1.
create table #aaa(...)
эквивалентны, почему input не видит таблицу в первом случае ?

На лицо глюк :(. Завтра попробую create table #aaa

White Owl
Это единственный серьезный аргумент против глобальных временных таблиц. Но если меняются исходные таблицы.... может имеет смысл наваять внешний конвертор данных? Который бы автоматически подстраивался под новый набор колонок?


Вот я и ваяю внешний конвертор данных. Правда не автоматический.
С автоматическим возникает вопрос согласования спецификаций. Без человека все равно не обойтись :( А dbisql и SQL-скрипты обладают достаточными возможностями для конвертации.

У меня там пользователь - оператор, который может нажать кнопочку и сделать внеплановую закачку данных, посмотреть на статистику и решить - принимать их или нет. И учить его программировать или делать настройки конвертора самому дело неблагодарное. :( Повлиять на поставщиков исходных данных тоже не могу. Они говорят - "А нам так удобно и переделывать не будем!" :-((

На днях столкнулся с аналогичной проблемой при импорта данных из системы "Клиент-банк". Эти умники по умолчанию экспортируют как раз в dbf.

dbisqlc напрочь отказывался делать input - лезли ошибки преобразования. Чем они делают файл я так и не понял, Clipper файл принимал и данные показывал.
Вскрытие показало, что авторы в поле типа numeric(6) умудрились записать время обработки операции в формате "16:43". Clipper спокойно принимал 16, а dbisql - нет :(

После 4 дней общеня с банком оказалось, что система, к счастью, умеет делать экспорт и в текстовый файл. Правда fixed формат, но уже не тот глюкавый DBF :)
...
Рейтинг: 0 / 0
Проблема с input into... в ASA9.0.2
    #33031082
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dp_tnd White Owl
Ну вообще-то, "declare local temporary table aaa" и "create table #aaa" абсолютно идентичны :)
Но если операторы эквивалентны, почему input не видит таблицу в первом случае? На лицо глюк :(.
Я всегда использую create table #aaa потому что оно пишется чуть покороче чем declare local temporary table aaa :) Да и диез в названии таблицы всегда напоминает о ее временной природе. В BOL нет ни одного упоминания о существовании какой-либо практической разницы между этими двумя синтаксами (я специально искал и не нашел). В главе про Create table есть такой абзац:
BOL Temporary tables You can create a temporary table by preceding the table name in a CREATE TABLE statement with a pound sign (#). In Adaptive Server Anywhere, these are declared temporary tables, which are available only in the current connection. For information, see DECLARE LOCAL TEMPORARY TABLE statement.

dp_tnddbisqlc напрочь отказывался делать input - лезли ошибки преобразования. Чем они делают файл я так и не понял, Clipper файл принимал и данные показывал.
Вскрытие показало, что авторы в поле типа numeric(6) умудрились записать время обработки операции в формате "16:43". Clipper спокойно принимал 16, а dbisql - нет :(
Скорее всего у них своя собственная библиотека. Я работал со всеми существующими dbf форматами и ответсвенно заявляю, что ни одна система использующая dbf как родной формат не запишет "16:43" в numeric(6) поле :)
...
Рейтинг: 0 / 0
Проблема с input into... в ASA9.0.2
    #33034055
dp_tnd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наконец добрался до компьютера с ASA и занялся экспериментами.
Для начала попробовал сделать как рекомендовано White Owl :
White Owl
У меня впрочем еще с ASA6 вполне работают скрипты написаные вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
   create table #t( ..... );
   input into #t from aaa.dbf format DBASEIII by order;
   // some other work
   drop table #t;

   create table #t( other set of fields );
   input into #t from bbb.dbf format DBASEIII by order;
   // some other work
   drop table #t;  // Последний drop не обязателен, но можно сделать :)
end;
Ни разу не встречал проблем.

Проблема встретилась. Не помню уже, как там было в ASA6, но ASA 9.0.2.3044
ругается "SQLCODE = -131, синтаксическая ошибка около input..." :(

Как только убираю begin и end начинает пытаться работать.

Что я делаю неправильно ?

Дальнейшие эксперименты показали, что нужная мне конструкция работает только тогда , когда исполняется через dbisql G . А меня интересует исполнять импорт через dbisql C - машинка там дохловатая, и вообще - нет никакого интереса деплоить туда JRE и прочие радости. :(

Кроме того, замечены за dbisqlG плавающие глюки, когда при загрузке в БД множества объектов через последовательность операторов READ, вдруг он сходит с ума и начинает русские комментарии и констатны превращать в "крокозябры". :(

Попробую написать в поддержку, авось кейс откроют :(
...
Рейтинг: 0 / 0
Проблема с input into... в ASA9.0.2
    #33034111
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dp_tndПроблема встретилась. Не помню уже, как там было в ASA6, но ASA 9.0.2.3044
ругается "SQLCODE = -131, синтаксическая ошибка около input..." :(
Как только убираю begin и end начинает пытаться работать.
Что я делаю неправильно ?
Все правильно. Просто dbisqlc отправляет все что находится внутри begin/end блока на сервер, не разбираясь. А input это команда dbisql*, а не сервера. dbisqlg в этом плане умнее...
Хм... Оказывается я уже очень давно не использовал dbisqlc, даже забыл об этой фиче :)

dp_tndА меня интересует исполнять импорт через dbisql C - машинка там дохловатая, и вообще - нет никакого интереса деплоить туда JRE и прочие радости. :(
Значит begin/end скобки не нужны и вообще противопоказаны.
...
Рейтинг: 0 / 0
Проблема с input into... в ASA9.0.2
    #33034588
dp_tnd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl dp_tndПроблема встретилась. Не помню уже, как там было в ASA6, но ASA 9.0.2.3044
ругается "SQLCODE = -131, синтаксическая ошибка около input..." :(
Как только убираю begin и end начинает пытаться работать.
Что я делаю неправильно ?
Все правильно. Просто dbisqlc отправляет все что находится внутри begin/end блока на сервер, не разбираясь. А input это команда dbisql*, а не сервера. dbisqlg в этом плане умнее...

А вот и не умнее. :-) Та же самая ошибка, точнее наверное особенность работы. Но input в локальную временную таблицу он делает нормально. Кинул письмо в Московский саппорт, Ждемс...

Кстати, в недрах BOL, в разделе о деплоировании административных утилит зарыта фраза, что "... мы не гарантируем в dbisqlc всех фич и полной совместимости с dbisqlg" :-(( Но не настолько же.

Я конечно их понимаю, но команда input делалась в те далекие времена, когда о java-версиях утилит мы и не подозревали. И у меня крутится в голове смутное воспоминание, что на версии 5.5 оно таки работало, а с переходом на 6 надобность в таком варианте отпала. А теперь вот снова появилась :))
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема с input into... в ASA9.0.2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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