powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / помогите с процедурой.
9 сообщений из 9, страница 1 из 1
помогите с процедурой.
    #36111562
klepa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, коллеги!
Написал процедуру, которая должна брать данные из БД на другом сервере и вставлять в текущую БД.
Informix 9.40UC6

Код: 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.
create procedure ins_paym_to_another_server ( min_id integer, max_id integer )
--
returning
{o_rv} int, -- код операции
{o_msg} varchar ( 255 );
--=========================
define  i, v_id_paym_source, v_id_paym_dest   int;
define sql_err, isam_err  int;
define errm char( 128 );
define retmsg varchar ( 255 );
--====================
BEGIN
  ON EXCEPTION SET sql_err, isam_err,  errm
    let retmsg =  sql_err || " : " || isam_err || "; errmsg: " || errm;
    return - 9 ,  retmsg;
  end exception;
      let  i= 0 ;
    foreach tmp_cursor for  select id_paym into v_id_paym_source from ok_arch@onbe:paym
     where  id_paym >= min_id and id_paym < max_id
	select id_paym into v_id_paym_dest from paym 
	where id_paym = v_id_paym_source;
	if v_id_paym_dest is null then 
                 let i=i+ 1 ;
		insert into paym select * from ok_arch@onbe:paym
		where id_paym = v_id_paym_source;
	end if;
     end foreach;

        return  0 ,  'Insert ' ||i|| ' records in dest DB.';
END;
end procedure;

При запуске получаю код ошибки 999.
Сервера и БД доступны в обоих направлениях.

Процедура вида:

Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
create procedure comp_paym ( min_id integer, max_id integer )
--
returning
{o_rv} int, -- код операции
{o_msg} varchar ( 255 );
--=========================
define  i, y,  v_id_paym, v_id_paym_source, v_id_paym_dest   int;
define sql_err, isam_err  int;
define errm char( 128 );
define retmsg varchar ( 255 );
--====================
BEGIN
  ON EXCEPTION SET sql_err, isam_err,  errm
    let retmsg =  sql_err || " : " || isam_err || "; errmsg: " || errm;
    return - 9 ,  retmsg;
  end exception;
      let  i= 0 ;
      let  y= 0 ;
    foreach tmp_cursor for  select id_paym into v_id_paym_source from paym
     where  id_paym >= min_id and id_paym < max_id
	select id_paym into v_id_paym from paym 
	where id_paym = v_id_paym_source;
	if v_id_paym is not null then 
                 let i=i+ 1 ;
	end if;
     end foreach;

    foreach tmp_cursor for  select id_paym into v_id_paym_dest from paym
     where  id_paym >= min_id and id_paym < max_id
	select id_paym into v_id_paym from paym 
	where id_paym = v_id_paym_dest;
	if v_id_paym is not null then 
                 let y=y+ 1 ;
	end if;
     end foreach;

        return  0 ,  'Find '||i||' records in source DB. Find '||y||' records in dest DB.';
END;

end procedure;

отрабатывает нормально.
Подскажите, где грабли.
Заранее спасибо!
...
Рейтинг: 0 / 0
помогите с процедурой.
    #36111638
klepa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гм...
Похоже, что ему не нравится * в селекте.
...
Рейтинг: 0 / 0
помогите с процедурой.
    #36111654
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-999 Not implemented yet.

This error means the functionality being exercised is not currently
implemented. Check the documentation and release notes that
describe this current restriction in this particular release for this
product. If this condition is not described in the regular documentation
or the release notes and recurs, note all circumstances and
contact IBM Technical Support.

Т.е. функциональность в данной версии не реализована. Если вам нужна репликация, то может стоит попробовать ее?
...
Рейтинг: 0 / 0
помогите с процедурой.
    #36111690
klepa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно перенести разово данные из одной БД в другую, возможно позже это будет делаться регулярно.
Вот такой запрос выполняется:

Код: plaintext
insert into ttt select * from ok_arch@onbe:ttt

В таблице ttt два столбца типа integer

а вот такой - нет:

Код: plaintext
1.
select * from ok_arch@onbe:paym

в таблице paym - 60 самых разных столбцов
...
Рейтинг: 0 / 0
помогите с процедурой.
    #36111699
Фотография Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В документации есть список типов, которые не поддерживаются в select из другой базы.
Точно знаю, что в этом списке serial и lvarchar.
...
Рейтинг: 0 / 0
помогите с процедурой.
    #36111701
klepa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Селект с перечислением всех столбцов тоже не нравится. :-(((
...
Рейтинг: 0 / 0
помогите с процедурой.
    #36111709
klepa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Tan
Спасибо, понял.
Тогда посоветуйте что-нибудь кроме Unload/Load.
...
Рейтинг: 0 / 0
помогите с процедурой.
    #36111723
klepa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Tan
Serial он любит.
Вот такое работает:

Код: plaintext
select id_paym from ok_arch@onbe:paym

Перечисление всех полей не работает.
...
Рейтинг: 0 / 0
помогите с процедурой.
    #36111755
klepa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, ему не нравится lvarchar
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / помогите с процедурой.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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