Определение строк со смешанными языками (русские и английские буквы)

2 Сентябрь 2010 Нет комментариев

Вытаскиваем записи, у которых есть хотя бы одна нерусская буква

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

Объединение интервалов дат

31 Август 2010 Нет комментариев
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

30 Август 2010 Нет комментариев

Процедура SLEEP останавливает процесс на указанное время.

DBMS_LOCK.SLEEP(seconds  IN NUMBER);

где seconds — время в секундах (и долей секунд) на которое надо остановить процесс.

Categories: SQL Tags: , ,

Модуль ONT — Связь в заказах между складской и операционной организацией

18 Август 2010 Нет комментариев
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

16 Август 2010 2 comments

Используем стандартный 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&params=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», пункт «Группа данных»)

Разбить период на месяца

5 Август 2010 7 comments
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


Использование таймера

Таймер

Таймер (Timer) – это способ выполнения кода через определенное время.  По истечении указанного времени вызывается тригер WHEN-TIMER-EXPIRED, в котором и обрабатывается реакция на запуск таймера.

Таймером очень хорошо пользоваться для непрерывного отслеживания каких-либо действий. Вы также можете использовать таймер как планировщик, закрывая формы по истечении указанного времени, для выполнения автосохранения в форме, для согласованного обновления данных в разных блоках формы и т.д.

Читать дальше про “Использование таймера” »

Изменение VISUAL_ATTRIBUTE для позиции в строке блока

SET_ITEM_INSTANCE_PROPERTY — установить свойства экземпляра элемента.

set_item_instance_property('NAME_BLOCK.NAME_ITEM', CURRENT_RECORD, VISUAL_ATTRIBUTE,'NAME_VISUAL_ATTRIBUTE');

Создать дубликаты строк

with t as
(
  select 'a' a, 2 n from dual union all
  select 'b' a, 3 n from dual union all
  select 'c' a, 5 n from dual union all
  select 'd' a, 1 n from dual union all
  select 'e' a, 0 n from dual
)
select *
 from t,
      table(select collect(level) from dual connect by level<=t.n);

A          N COLUMN_VALUE
- ---------- ------------
a          2            1
a          2            2
b          3            1
b          3            2
b          3            3
c          5            1
c          5            2
c          5            3
c          5            4
c          5            5
d          1            1
e          0            1

12 rows selected

При n=0, строка останется.

Читать дальше про “Создать дубликаты строк” »