powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как использовать "Forward to"?
4 сообщений из 4, страница 1 из 1
Как использовать "Forward to"?
    #32988371
Yuri Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста, а как можно использовать возвращаемые командой "Forward to" результаты выборок из удаленного сервера?

В курсор записать не дает, как источник данных для select тоже
ошибки выкидывает.

А в голом виде: forward to OraServ select * from A62_32.definition_attr'
эта команда не особенно полезна... :(( Sybase ASA 8.

Спасибо!
...
Рейтинг: 0 / 0
Как использовать "Forward to"?
    #32989753
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теоретически, "forward to" просто запрещает ASA делать синтаксический разбор всех последующих SQL команд и отдает их в чистом виде удаленому серверу. Предполагается что эти команды будут идти на диалекте того удаленного сервера.

Запрет на локальный синтаксический разбор влечет за собой невозможность использования локальных курсоров, таблиц, переменных. Автоматический коммит удаленного сервера, делаемый перед forward to, запрещает использовать эту команду как подзапрос.

Итого, единственный вариант получить что-то полезное от нее - модификация данных на удаленном сервере используя его родной диалект. Пересылка нужных данных в какую-либо временную таблицу (внутри удаленного сервера). И последующий запрос этих данных из ASA уже без использования "forward to".

В общем, рассматривай эту команду как микро-консоль удаленного сервера :)
...
Рейтинг: 0 / 0
Как использовать "Forward to"?
    #32992720
Yuri Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТеоретически, "forward to" просто запрещает ASA делать синтаксический разбор всех последующих SQL команд и отдает их в чистом виде удаленому серверу. Предполагается что эти команды будут идти на диалекте того удаленного сервера.

Запрет на локальный синтаксический разбор влечет за собой невозможность использования локальных курсоров, таблиц, переменных. Автоматический коммит удаленного сервера, делаемый перед forward to, запрещает использовать эту команду как подзапрос.

Итого, единственный вариант получить что-то полезное от нее - модификация данных на удаленном сервере используя его родной диалект. Пересылка нужных данных в какую-либо временную таблицу (внутри удаленного сервера). И последующий запрос этих данных из ASA уже без использования "forward to".

В общем, рассматривай эту команду как микро-консоль удаленного сервера :)

Ну, в общем то, так ее и рассматриваю. Получилось, правда, загнать результаты команды в cursor и передать ее в базу. Вот так:

автор
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
ALTER procedure DBA.test_forward() /* parameter, ... */
begin
  declare comm char(256);
  set comm='Forward to OraAris ''select * from A62_21.Definition_Attr''';
  begin
    declare err_notfound exception for sqlstate value '02000';
    declare OraID char(15);
    declare OraDiscriminator numeric(10);
    declare OraAttrTypeNum numeric(10);
    declare OraParentItemID char(15);
    declare OraLanguageID char(15);
    declare OraLongValue numeric(20);
    declare OraDoubleValue double;
    declare OraTextFragment varchar(100);
    declare OraTextVarChar TEXT;
    declare OraTextClob long varchar;
    declare OraBlobValue long binary;
    declare cur1 dynamic scroll cursor using comm;
    delete from Definition_Attr;
    open cur1;
    lp: loop
      fetch next cur1 into OraID,OraDiscriminator,OraAttrTypeNum,OraParentItemID,OraLanguageID,
        OraLongValue,OraDoubleValue,OraTextFragment,OraTextVarChar,OraTextClob,OraBlobValue;
      if sqlstate = err_notfound then leave lp
      end if;
      insert into Definition_Attr select OraID,OraDiscriminator,OraAttrTypeNum,OraParentItemID,OraLanguageID,
          OraLongValue,OraDoubleValue,OraTextFragment,OraTextVarChar,OraTextClob,OraBlobValue
    end loop lp;
    close cur1;
    select* from Definition_Attr
  end
end


Процедура работает, правда с оговорками. Но они, наверно, уже не к ней, а к драйверам. Дело в том, что в удаленной таблице есть поля типа Clob и Blob. Две строки в нее я ввел ручками (в том числе и в Clob), а 85054 строки добавил из аналогичной таблицы, лежащей в соседней схеме. Так вот - эти 2 "ручные" строки читаются в Sybase нормально, а вот на всех остальных при чтении (запросе select *) уже сформированной в Sybase таблицы лезет ошибка Interactive SQL про то, что данные 'incorrect or incomplete'... Наверно какие-нибудь проблемы с кодировкой при передаче текста написанного по-русски происходят? Или может быть что-то еще?
...
Рейтинг: 0 / 0
Как использовать "Forward to"?
    #32992912
Yuri Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri TyurinПроцедура работает, правда с оговорками. Но они, наверно, уже не к ней, а к драйверам. Дело в том, что в удаленной таблице есть поля типа Clob и Blob. Две строки в нее я ввел ручками (в том числе и в Clob), а 85054 строки добавил из аналогичной таблицы, лежащей в соседней схеме. Так вот - эти 2 "ручные" строки читаются в Sybase нормально, а вот на всех остальных при чтении (запросе select *) уже сформированной в Sybase таблицы лезет ошибка Interactive SQL про то, что данные 'incorrect or incomplete'... Наверно какие-нибудь проблемы с кодировкой при передаче текста написанного по-русски происходят? Или может быть что-то еще?

Мда... Дальнейшее "исследование" показало, что затыкается на полях TextVarchar. Причина наверно та же - проблема кодировки. :(
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как использовать "Forward to"?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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