Workflow: Ошибка при попытке коннекта к базе (1300)
symptom: Error when loading workflow from the database
symptom: 1300: Could not load.
symptom: 1114: Could not load from database.
symptom: 1101: Could not load item types from database. FILTER=%
symptom: 333: Could not set item type properties for ‘FNDCMSTD’.
symptom: 333: Could not set item type properties for ‘FNDCMSTD’.
symptom: 306: Invalid display name ‘Hintergrundmanager — Funktionen ‘.
symptom: 203:Value contains leading or trailing spaces
symptom: Trailing spaces exist in table WF_ITEM_TYPES_TL
Решение
1) Проверить таблицу WF_ITEM_TYPES_TL на существование замыкающих пробелов в столцах DISPLAY_NAME и DESCRIPTION
2) Если пробелы присутствуют выполнить update
update WF_ITEM_TYPES_TL set DISPLAY_NAME = RTRIM(DISPLAY_NAME); update WF_ITEM_TYPES_TL set DESCRIPTION = RTRIM(DESCRIPTION);
Функция PERCENTILE_DISC
Функция принимает на вход процентное значение (P) и условие сортировки, возвращает элемент из набора — наименьшее значение функции CUME_DIST, которое больше или равно значению P.
PERCENTILE_DISC(expr) WITHIN GROUP (ORDER BY expr [ DESC | ASC ]) [ OVER (query_partition_clause) ]
Пример
with t as (select 1 id, 10 val from dual union all select 2 id, 20 val from dual union all select 3 id, 30 val from dual union all select 4 id, 50 val from dual union all select 5 id, 70 val from dual ) select id, val, cume_dist() over (order by val) "Cume_Dist", percentile_disc(0.50) within group (order by val) over() "percentile_disc" from t order by val; ID VAL Cume_Dist percentile_disc ---------- ---------- ---------- --------------- 1 10 0,2 30 2 20 0,4 30 3 30 0,6 30 4 50 0,8 30 5 70 1 30
Функция CUME_DIST
Аналитический вариант
CUME_DIST( ) OVER ( [ query_partition_clause ] order_by_clause )
Функция CUME_DIST рассчитывает кумулятивное распределение значения в наборе данных. Возвращаемое значение находится в диапазоне от 0 до 1. Функция на вход принимает числовой тип данных, или тип данных, который может неявно преобразовать в числовой.
Определение строк со смешанными языками (русские и английские буквы)
Вытаскиваем записи, у которых есть хотя бы одна нерусская буква
with t as ( select 1 id, 'Сидоров' s from dual union all select 2, 'Cидoров' from dual union all select 3, 'Пирогов' from dual ) select * from t t0 where soundex(t0.s) is not null; ID S ---------- ------- 2 Cидoров
Предположительные совпадения (Пирогов добавлен для показательности неточности подхода)
with t as ( select 1 id, 'Сидоров' s from dual union all select 2, 'Cидoров' from dual union all select 3, 'Пирогов' from dual ) select * from t t0, t t1 where UTL_MATCH.JARO_WINKLER_SIMILARITY(t0.s,t1.s)>=70 and soundex(t0.s) is null and soundex(t1.s) is not null and t0.id<>t1.id; ID S ID S ---------- ------- ---------- ------- 1 Сидоров 2 Cидoров 3 Пирогов 2 Cидoров
Простой translate для вытаскивания совпадающих написаний
with t as ( select 1 id, 'Сидоров' s from dual union all select 2, 'Cидoров' from dual union all select 3, 'Пирогов' from dual ) select * from t t0, t t1 where translate(t1.s,'AaBbCcEegHKkMmOoPpTuXxy','АаВьСсЕедНКкМтОоРрТиХху')=t0.s and t0.id<>t1.id; ID S ID S ---------- ------- ---------- ------- 1 Сидоров 2 Cидoров
Вывести данные в одном языке (латиница или кирилица) + цифры и знак подчёрка:
with t as ( select 'Сидоров' val from dual union all select 'Cидoров' from dual union all select 'Пирогов' from dual union all select 'ASD_1' from dual union all select 'ASD_1Я' from dual ) select val from t where regexp_like(val, '^([A-z]|[0-9]|_)+$') or regexp_like(val, '^([А-я]|[0-9]|_)+$') / VAL ------- Сидоров Пирогов ASD_1
Объединение интервалов дат
with t as ( select to_date ('01.01.2009', 'dd.mm.yyyy') beg_date, to_date ('10.01.2009', 'dd.mm.yyyy') end_date from dual union all select to_date ('03.01.2009', 'dd.mm.yyyy') beg_date, to_date ('05.01.2009', 'dd.mm.yyyy') end_date from dual union all select to_date ('10.01.2009', 'dd.mm.yyyy') beg_date, to_date ('12.01.2009', 'dd.mm.yyyy') end_date from dual union all select to_date ('13.01.2009', 'dd.mm.yyyy') beg_date, to_date ('20.01.2009', 'dd.mm.yyyy') end_date from dual union all select to_date ('01.02.2009', 'dd.mm.yyyy') beg_date, to_date ('10.02.2009', 'dd.mm.yyyy') end_date from dual ) -- select min (beg_date) as beg_date, max (end_date) as end_date from ( select beg_date, end_date, sum(strt_grp) over (order by beg_date, end_date ) grp_num from ( select beg_date, end_date, case when beg_date > 1 + max(end_date) over (order by beg_date, end_date rows between unbounded preceding and 1 preceding) then 1 end strt_grp from t ) ) group by grp_num order by beg_date; BEG_DATE END_DATE ----------- ----------- 01-01-2009 20-01-2009 01-02-2009 10-02-2009
Процедура SLEEP
Процедура SLEEP останавливает процесс на указанное время.
DBMS_LOCK.SLEEP(seconds IN NUMBER);
где seconds — время в секундах (и долей секунд) на которое надо остановить процесс.
Модуль ONT — Связь в заказах между складской и операционной организацией
select h.order_number, -- операционная единица h.org_id as operate_org_id, -- складская организация pla.organization_id as inventory_org_id, l.header_id, l.line_id, l.ordered_quantity as qty, l.request_date -- from oe_order_headers_all h, oe_order_lines_all l, po_location_associations_all pla, mtl_system_items_b msi where 1=1 and h.header_id = l.header_id and h.sold_to_org_id = pla.customer_id -- msi and msi.inventory_item_id = l.inventory_item_id and msi.organization_id = pla.organization_id;
Создание URL для доступа к форме OEBS
Используем стандартный API для генерации URL
declare url varchar2(32767); begin url:= fnd_run_function.get_run_function_url ( p_function_id =>1043600, p_resp_appl_id =>-1, p_resp_id =>-1, p_security_group_id =>0, p_parameters =>'TEST_ID=182'||' '||'TEST_ID2=548', p_encryptParameters =>true ) ; dbms_output.put_line(url); end;
В результате получаем URL:
http://<host>:<port>/OA_HTML/RF.jsp?function_id=<function_id_or_name> http://.../OA_HTML/RF.jsp?function_id=1043600&resp_id=-1&resp_appl_id=-1&security_group_id=0&lang_code=RU¶ms=QU2-OJtLRJHeJif-a9I4tPUdx3zMf-CX4yR8feCtDVM
Регистрация приложения
1 | Создать структуру каталогов |
2 | Изменить файл (по умолчанию defaults.env) настроек переменных окружения для сервера форм. Его имя хранится в переменной окружения envFile в файле appsweb.cfg, имя и путь к которому в свою очередь хранятся в переменной окружения FORMS_WEB_CONFIG_FILE, добавив строку с установкой значения переменной окружения <префикс приложения (ЗАГЛАВНЫМИ)>_TOP. Тем самым будет определён каталог, в котором сервер Oracle Forms сможет найти файлы приложения |
3 | В файл $APPL_TOP/custom<имя инстанса>.env следует добавить инициализацию тех же переменных с последующим их экспортом (это необходимо для выполнения системных процедур и вызова параллельных запросов) и проверить наличие вызова это файла из $APPL_TOP/APPS<имя инстанса>.env. При наличии в составе приложения исполняемых операционной системой программ также следует добавлять <префикс приложения (ЗАГЛАВНЫМИ)>_TOP/bin к переменной окружения PATH (если используется) |
4 | Остановить менеджер параллельных программ (concurrent manager) $ADMIN_SCRIPTS_HOME/adcmctl.sh stop apps/apps |
5 | Выполнить файл, замещающий APPLSYS.env . / $APPL_TOP/APPS<имя инстанса>.env |
6 | Перезапустить concurrent manager $ADMIN_SCRIPTS_HOME/adcmctl.sh start apps/apps |
7 | Войдите в систему с полномочиями Разработчик приложений (Application Developer) и зарегистрируйте приложение |
8 | Войдите в систему с полномочиями System Administrator и добавьте приложение в группу данных (раздел меню «Security : ORACLE», пункт «Группа данных») |
Разбить период на месяца
with t as ( select to_date('03-05-2010','dd-mm-yyyy') d1, to_date('26-08-2010','dd-mm-yyyy') d2 from dual ) -- select decode(level,1,d1,trunc(add_months(d1,level-1),'mm')) as date_from, case when add_months(trunc(d1,'mm'),level)>d2 then d2 else last_day(add_months(d1,level-1)) end date_to from t connect by add_months(trunc(d1,'mm'),level-1) < d2; DATE_FROM DATE_TO ----------- ----------- 03.05.2010 31.05.2010 01.06.2010 30.06.2010 01.07.2010 31.07.2010 01.08.2010 26.08.2010
Если хотим, чтобы в период входил 1 день последнего месяца, то :
with t as ( select to_date('03-05-2010','dd-mm-yyyy') d1, to_date('01-08-2010','dd-mm-yyyy') d2 from dual ) -- select decode(level,1,d1,trunc(add_months(d1,level-1),'mm')) as date_from, case when add_months(trunc(d1,'mm'),level)>d2 then d2 else last_day(add_months(d1,level-1)) end date_to from t connect by add_months(trunc(d1,'mm'),level-1) <= d2; DATE_FROM DATE_TO ----------- ----------- 03.05.2010 31.05.2010 01.06.2010 30.06.2010 01.07.2010 31.07.2010 01.08.2010 01.08.2010
Последние комментарии