CftClub.ru
Клуб специалистов ЦФТ-Банк

Обновление справочников БИК автоматом
На страницу Пред.  1, 2, 3  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеПн Май 14, 2012 14:45    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
Либо как вариант к узаканному времени затянуть файл на сервер с помощью приемо-передатчика и там уже обработать как угодно.


Это предполагал во втором этапе типа к оракловому серваку примапить шару, но хотел сначала с локалки попробовать затянуть (как это делает дистрибутивная операция).
Придётся сразу пробовать с сервака тянуть Smile
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеПн Май 14, 2012 15:47    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Alexsey пишет:
Либо как вариант к узаканному времени затянуть файл на сервер с помощью приемо-передатчика и там уже обработать как угодно.


Это предполагал во втором этапе типа к оракловому серваку примапить шару, но хотел сначала с локалки попробовать затянуть (как это делает дистрибутивная операция).
Придётся сразу пробовать с сервака тянуть Smile


а зачем шару? Настройте у приемо-передатчика каталог источник, а приемо-передатчик уже через FIO затянет файл в приемник куда настроите. Не надо ни каких шар на сервере БД, ИМХО это лишнее.
Ну а пока пишите, файл можно подкладывать через плагины тотала или фара
_________________
всегда есть как минимум 2 выхода
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеВт Май 15, 2012 08:06    Ответить с цитатой
Полезность: Нет оценки
Переписал операцию, перенёс параметры в переменные, сделал без оболочную, отключил "запускать монитор коммуникац.канала" - ручками запускается - всё ОК.
Но когда ставлю в очередь (выполнение заданий по расписанию) при её отрабатывании вылетает ошибка:
15/05/2012 09:01:07.ORA-20100: EXEC-FILEOPERATION: [] Операция не может быть выполнена для этого файла
Я так подозреваю, что это из за выплёвывания сообщения на экран (типа операции Stdio.put_line_buf).
Я правильно думаю и как можно отключить это сообщение?
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеВт Май 15, 2012 08:37    Ответить с цитатой
Полезность: Нет оценки
Нет, не из за этого, закоментил put_line_buf в UNIMP.WriteMess сообщение не появляется (когда руками толкаешь операцию), а через расписание всё таже ошибка. Где покопать ещё?
maestro
Профи


Вступление в Клуб: 12.10.2010
СообщениеВт Май 15, 2012 08:37    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Переписал операцию, перенёс параметры в переменные, сделал без оболочную

Каким образом инициализируются переменные? Не понятно зачем это.

yaffil пишет:

отключил "запускать монитор коммуникац.канала"

Это можно было не делать.. Монитор запускается навигатором. При запуске из джоба исполняется только тело операции.

yaffil пишет:

Но когда ставлю в очередь (выполнение заданий по расписанию) при её отрабатывании вылетает ошибка:
15/05/2012 09:01:07.ORA-20100: EXEC-FILEOPERATION: [] Операция не может быть выполнена для этого файла

Файл как загружаешь на сервер? Приемо-передатчиом по методу Alexey? Или ручками через плагин?

Вобщем, проверь, что файлы лежат на сервере в правильном месте.
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеВт Май 15, 2012 08:53    Ответить с цитатой
Полезность: Нет оценки
maestro пишет:

Каким образом инициализируются переменные? Не понятно зачем это.


Т.к. функцию с параметрами нельзя засунуть в JOB.
Инициализируются в "Проверка", значит, наверное, в этом косяк, раз выполняется только "Тело". Сейчас перерисую.

maestro пишет:

Файл как загружаешь на сервер? Приемо-передатчиом по методу Alexey? Или ручками через плагин?

Вобщем, проверь, что файлы лежат на сервере в правильном месте.


Примэпили диск к ораклу, все файлы видит как надо (ручками операция отрабатывает на ура).
maestro
Профи


Вступление в Клуб: 12.10.2010
СообщениеВт Май 15, 2012 08:57    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:

Инициализируются в "Проверка", значит, наверное, в этом косяк, раз выполняется только "Тело". Сейчас перерисую.


Мне кажется, лучше написать оберточную операцию без параметров и переменных, в теле которой до вызова дистрибутивной операции добавить инициализацию её параметров.. И её потом поставить в джоб.
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеВт Май 15, 2012 09:14    Ответить с цитатой
Полезность: Нет оценки
maestro пишет:
yaffil пишет:

Инициализируются в "Проверка", значит, наверное, в этом косяк, раз выполняется только "Тело". Сейчас перерисую.


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


Спасибо, перенёс всё в тело - заработало. Про обёртку, что то, я как то, не представляю как её инициализировать:

Код:

::[CL_BANK_N].[FULL_REFRESHING](
   /*F_PZN*/      --Файл признаков
   ,/*F_REAL*/      --Файл ограничений участия в расчетах
   ,/*F_SEEK*/      --Файл действующих банков
   ,/*F_DEL*/      --Файл ликвидированных банков
   ,/*F_RAYON*/      --Файл районов
   ,/*F_MESS*/      --Файла протокола
   ,/*P_OURBANK*/      --Обновить свой банк
   ,/*P_OURBRANCH*/      --Обновить филиалы своего банка
   ,/*P_KEYBASEB*/      --Файл KEYBASEB
   ,/*P_KEYBASEF*/      --Файл KEYBASEF
   ,/*P_CORR_REL*/      --Обновить коротношения
   )


Файлы - это всё целые типы ::[FILE$LOAD] с кучей реквизитов.
maestro
Профи


Вступление в Клуб: 12.10.2010
СообщениеВт Май 15, 2012 09:57    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:

Файлы - это всё целые типы ::[FILE$LOAD] с кучей реквизитов.


В общем случае Экспорт-импорт копирует файл на сервер под управлением Клиента (навигатора). Далее передает управление серверной части, где запускается ТЕЛО, которое читает переданный файл. Из структуры при этом берутся только Путь и Имя файла. По сути, для простого чтения больше ничего и не нужно.

В твоем случае копировать ничего не надо, надо только указать ТЕЛУ где лежит файл, т.е. заполнить поля [DST_PATH] и [DST_NAME] структуры "с кучей реквизитов"...

Т.е. в теле оберточной операции объявляешь локальные переменные типа [FILE$LOAD], заполняешь в них поля [DST_PATH] и [DST_NAME], и передаешь в дистрибутивную операцию.

А еще лучше, пролистать код дистрибутивной операции, посмотреть какие поля там используются, и соответственно эти значения проинициализировать.


Последний раз редактировалось: maestro (Вт Май 15, 2012 10:02), всего редактировалось 1 раз
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеВт Май 15, 2012 10:00    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:


Спасибо, перенёс всё в тело - заработало. Про обёртку, что то, я как то, не представляю как её инициализировать:


Пример:
Код:

P_JOUR       ref [END_OD_JOUR];
mess      varchar2 := 'DEFAULT';
info      varchar2 := null;
zd        ::[END_OD_OPERATION] := null;
begin
   -- вызываем секцию DEFAULT дистрибутивной операции закрытия
   -- begin pl/sql
      Z$END_OD_OPERATION_END_OD.END_OD_VALIDATE(zd,'END_OD_OPERATION', mess, info, P_JOUR);
   -- end pl/sql
end;

_________________
всегда есть как минимум 2 выхода
prog
Эксперт


Вступление в Клуб: 03.03.2008
СообщениеВт Май 15, 2012 10:45    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
yaffil пишет:


Спасибо, перенёс всё в тело - заработало. Про обёртку, что то, я как то, не представляю как её инициализировать:


Пример:
Код:

P_JOUR       ref [END_OD_JOUR];
mess      varchar2 := 'DEFAULT';
info      varchar2 := null;
zd        ::[END_OD_OPERATION] := null;
begin
   -- вызываем секцию DEFAULT дистрибутивной операции закрытия
   -- begin pl/sql
      Z$END_OD_OPERATION_END_OD.END_OD_VALIDATE(zd,'END_OD_OPERATION', mess, info, P_JOUR);
   -- end pl/sql
end;


pl\sql вставка лишняя

Цитата:
Существует возможность вызывать процедуру проверки параметров операции (кода, заданного в секции validate). Такой вызов осуществляется путем разыменования через синтаксис блокирующего обращения по ссылке (операторы '=>' и '%=>'). При этом следует иметь в виду, что все параметры операции являются IN OUT (независимо от того, как они описаны в свойствах для исполняемого кода – секции execute) и первые два параметра всегда строковые и именуются P_MESSAGE и P_INFO. Поэтому перед вызовом кода проверки нужно позаботиться о правильной инициализации значений этих параметров. Также validate всегда описан как процедура, даже если у операции задан тип возвращаемого значения. Возвращаемое значение и направленность параметров операции относятся только к секции execute операции.
. Пример:
Код:
v_mes   string;
v_info  string;
v_ref   ref [PERSON];
begin

v_mes := 'DEFAULT';
v_info:= null;
v_ref=>[EDIT](v_mes,v_info,PARAM); -- validate
v_ref.[EDIT](PARAM); -- execute

...
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеВт Май 15, 2012 11:09    Ответить с цитатой
Полезность: Нет оценки
prog пишет:


pl\sql вставка лишняя

Пример:
Код:
v_mes   string;
v_info  string;
v_ref   ref [PERSON];
begin

v_mes := 'DEFAULT';
v_info:= null;
v_ref=>[EDIT](v_mes,v_info,PARAM); -- validate
v_ref.[EDIT](PARAM); -- execute



Это верно, но столкнулся на 11-м оракле с ситуацией, когда такой код не компилился, ибо компилятор не понимал такой синтаксис. Может особенности ядра, может что-то еще. разбирался долго, но заработало только со вставкой Sad
Я вставки не люблю, но иногда приходится извращаться.
Да, в примере приведен пример вызова секций групповой операции не возвращающей результата, а ее через псевдовалидацию сложно вызвать)
_________________
всегда есть как минимум 2 выхода
Pauls
Участник со стажем


Вступление в Клуб: 16.11.2011
СообщениеЧт Авг 30, 2012 12:38    Ответить с цитатой
Полезность: Нет оценки
Коллеги, помогите, пожалуйста. Пытаюсь автоматизировать загрузку БИКов, хочу попробовать сперва, что бы загрузка происходила с локальной машины из каталога С:\DAT\.
Скопировал дистрибутивную операцию FULL_REFRESHING, процедуре инициализацию параметров перенес в тело и вместо параметров обьявил переменные
F_PZN [FILE$LOAD];
F_REAL [FILE$LOAD];
F_SEEK [FILE$LOAD];
F_DEL [FILE$LOAD];
F_RAYON [FILE$LOAD];
F_MESS [FILE$LOAD];

Значения F_PZN.[SRC_PATH],
F_PZN.[DST_PATH],
F_PZN.[SRC_NAME],
F_PZN.[DST_NAME] проверил, каталог показывает какой нужно и имя файла правильное, файл находиться в каталоге.
Но в момент выполнения появляется сообщение:
"Неудачная попытка открыть файл ./PZN.DBF !"
Подскажите, что я делаю не так или что вообще не сделано для корректного импорта БИКов?
prog
Эксперт


Вступление в Клуб: 03.03.2008
СообщениеЧт Авг 30, 2012 13:00    Ответить с цитатой
Полезность: Нет оценки
Автоматизировать значит загружать бики джобом? Если так то как вы планируете перемещать файлики на сервер...
Pauls
Участник со стажем


Вступление в Клуб: 16.11.2011
СообщениеЧт Авг 30, 2012 13:26    Ответить с цитатой
Полезность: Нет оценки
Да, сделать так, что процедура запускалась джобом. А что значит "перемещать файлики на сервер..." ? Физически брать набор файлов из одной директории, например, одной рабочей станции и перемещать их в каталог на сервер на котором крутиться БД или что то иное? Опыта работы с ЦФТ не так много, по этому и трудности.
Когда запускаю вручную дистрибутивную операцию FULL_REFRESHING, то подымается форма в которой все файлы *.DBF и их место нахождения корректное. Стоит только перенести код инициализации параметров из "Проверка" в "Тело" - сразу возникает описанная проблема.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3  След.
Страница 2 из 3

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru