Архив

Архив автора

OAF Standard CSS Introduction

19 Март 2010 2 comments

OraDataNumber

Пример отображения стиля

OraPromptText

Пример отображения стиля

Читать дальше про “OAF Standard CSS Introduction” »

Categories: OA Framework Tags: , , ,

Добавление отчета в меню

declare
  vr_Form_name   VARCHAR2(100) := 'XX_NAME';
  vr_Description VARCHAR2(200) := 'XX_DESCRIPTION';
begin
  -- Регистрация функции формы
  fnd_form_functions_pkg.load_row
  (
    x_function_name           => vr_Form_name
  , x_application_short_name  => 'FND'
  , x_form_name               => 'FNDRSRUN'
  , x_parameters              => 'CONCURRENT_PROGRAM_NAME="'||vr_Form_name
                                 ||'" PROGRAM_APPL_SHORT_NAME="'||'XX'
                                 ||'" TITLE="'||vr_Description||'"'
  , x_type                    => 'FORM'
  , x_web_host_name           => NULL
  , x_web_agent_name          => NULL
  , x_web_html_call           => NULL
  , x_web_encrypt_parameters  => NULL
  , x_web_secured             => NULL
  , x_web_icon                => NULL
  , x_object_name             => NULL
  , x_region_application_name => NULL
  , x_region_code             => NULL
  , x_user_function_name      => vr_Description
  , x_description             => vr_Description
  , x_owner                   => 'INITIAL SETUP'
  , x_custom_mode             => 'FORCE'
  );
-- Регистрация пункта меню
  fnd_menu_entries_pkg.load_row
  (
    x_mode          => 'REPLACE'
  , x_ent_sequence  => 910
  , x_menu_name     => 'MENU_NAME'
  , x_sub_menu_name => NULL
  , x_function_name => vr_Form_name
  , x_grant_flag    => 'Y'
  , x_prompt        => vr_Description
  , x_description   => vr_Description
  , x_owner         => USER
  );
--
COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    dbms_output.put_line(substr('Error: ' || SQLERRM, 1, 255));
ROLLBACK;
end;
/
SHOW ERRORS

Создание пользователя

declare
  l_user_id number;

  l_responsibility_key fnd_responsibility.responsibility_key%TYPE
         := 'SYSTEM_ADMINISTRATOR';
  l_application_short_name fnd_application.application_short_name%TYPE
         := 'SYSADMIN';

  l_responsibility_id   number;
  l_application_id      number;
  l_responsibility_name varchar2(200) := 'System Administrator';
  l_security_group_id number := 0;
begin
  l_user_id := fnd_user_pkg.CreateUserId(
      x_user_name            => 'TEST'
    , x_owner                => 'CUST'
    , x_unencrypted_password => '123456'
  );
select application_id into l_application_id
from fnd_application
where application_short_name = l_application_short_name;

select responsibility_id into l_responsibility_id
from fnd_responsibility
where application_id     = l_application_id
and responsibility_key = l_responsibility_key;

  fnd_user_resp_groups_api.insert_assignment(
    user_id                         => l_user_id
    , responsibility_id             => l_responsibility_id
    , responsibility_application_id => l_application_id
    , security_group_id             => l_security_group_id
    , start_date                    => trunc(sysdate)
    , end_date                      => NULL
    , description                   => l_responsibility_name
    );

  fnd_wf_engine.default_event_raise(
     'oracle.apps.fnd.security.user.assignment.change'
     , l_user_id || ':' || l_responsibility_id
     );

  fnd_wf_engine.propagate_user_role(
'FND_USR'
    , l_user_id
    , 'FND_RESP' || l_application_id
    , l_responsibility_id
    , trunc(sysdate)
    , NULL
  );

  -- Added for Function Security Cache Invalidation Project
  fnd_function_security_cache.insert_user_resp(
      l_user_id
    , l_responsibility_id
    , l_application_id
    );
commit;
end;

Замена кратных пробелов на один

17 Март 2010 6 comments
with t as (
  select 1 id, 'a s        sfd' info from dual
   union all
  select 2 id, 'a        b; g;g ;g  f' info from dual
   union all
  select 3 id, 'a     ' info from dual
   union all
  select 4 id, '     ' info from dual
)
SELECT id, REGEXP_REPLACE(TRIM(info), '  *', ' ') AS info_new FROM t
ORDER BY id;

Пример:

        ID INFO_NEW
---------- --------------------------------------------------------------------------------
         1 a s sfd
         2 a b; g;g ;g f
         3 a
         4

Извлечь подстроки используя разделители

17 Март 2010 7 comments

Для того чтобы разбить строку на подстроки, используя разделитель «;», можно воспользоваться следующим запросом.
Разделитель, конечно, может быть разный.

SQL> SELECT regexp_substr(str, '[^;]+', 1, level) str
  2  FROM (
  3        SELECT ' 1; 2; test1.' str FROM dual     ) t
  4  CONNECT BY instr(str, ';', 1, level - 1) > 0
  5  ;

STR
-------------
 1
 2
 test1.

Если хотим разбить на слова используя в виде разделителя пробел, то можно использовать perl синтаксис:

SQL> SELECT regexp_substr(str, '\S+', 1, level) str
  2  FROM (
  3        SELECT ' 1 2 test1.' str FROM dual     ) t
  4  connect by regexp_substr(str,'\S+',1,level) is not null
  5  ;

STR
-----------
1
2
test1.

Другие примеры…

Читать дальше про “Извлечь подстроки используя разделители” »

Сбор статистики

17 Март 2010 1 комментарий

Для сбора статистики используем процедуру

dbms_stats.gather_table_stats('SCOTT','EMP');

Если в базе данных имеются таблицы, которые часто обновляются, то частый сбор статистики может негативно повлиять на производительность базы данных. Для того, чтоб исключить объекты из автоматического или любого другого сбора статистики можно «закрепить» ее статистику:

begin
  dbms_stats.gather_table_stats('SCOTT','EMP');
  dbms_stats.lock_table_stats('SCOTT','EMP');
end;

Теперь, по этой таблице невозможно будет собрать статистику ни автоматически, ни вручную:

SQL>exec dbms_stats.gather_table_stats('SCOTT','EMP');

begin dbms_stats.gather_table_stats('SCOTT','EMP'); end;
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: at "SYS.DBMS_STATS", line 13182
ORA-06512: at "SYS.DBMS_STATS", line 13202
ORA-06512: at line 2

Снять блокировку статистики:

dbms_stats.unlock_table_stats('SCOTT','EMP');



Посмотреть данные о сборе статистики можно в таблице DBA_TAB_STATISTICS

select * from DBA_TAB_STATISTICS t where t.table_name = :name_table


Собрать статистику для индекса

begin
  dbms_stats.gather_index_stats('OWNER', 'INDEX_NAME');
end;

Статистика на секцию

begin
  dbms_stats.gather_table_stats(ownname => p_owner, tabname => p_table_name, partname => p_partition_name, degree=> 4, no_invalidate=>true );
end;
Categories: SQL Tags: ,

Узнать является ли строка числом

17 Март 2010 3 comments

Запрос для вывода только числовых значений, используем REGEXP.

При необходимости, оставляем только точку или запятую ‘^-?[[:digit:].]*$‘ или ‘^-?[[:digit:],]*$‘.
Или только целые числа ‘^-?[[:digit:]]*$

with t as (
  select '56456456' str from dual
  union all
  select '4 5' str from dual
  union all
  select 'sds5' str from dual
  union all
  select '-1,5' str from dual  
  union all
  select '-1.5' str from dual  
  )
  select * FROM t 
	where regexp_like(str, '^-?[[:digit:].,]*$');

STR
--------
56456456
-1,5
-1.5

Ну и более простой вариант, который тоже подходит в некоторых случаях:

select case when length(TRIM(TRANSLATE('45', ' 0123456789', ' '))) is null then 'ЧИСЛО'
            else 'СТРОКА'
       end res from dual
union all
select case when length(TRIM(TRANSLATE('a4', ' 0123456789', ' '))) is null then 'ЧИСЛО'
            else 'СТРОКА'
       end res from dual

Вывести строки, которые начинаются на цифру

with t as (
  select '56456456' str from dual
  union all
  select '4 5' str from dual
  union all
  select 'sds5' str from dual
  union all
  select '-1,5' str from dual  
  union all
  select '-1.5' str from dual  
  )
  select * FROM t 
	where regexp_like(str, '^\d');

STR
--------
56456456
4 5

LAG IGNORE NULLS

Для Oracle Database 10g

with t as
  (
  select 1 id,   1 val from dual
  union all
  select 3 id,   45 val from dual
  union all
  select 4 id,   null val from dual
  union all
  select 5 id,   null val from dual
  union all
  select 12 id,   48 val from dual
  union all
  select 10 id,   5 val from dual
  union all
  select 15 id,   10 val from dual)
--
select id, val,
       last_value(val IGNORE NULLS) over (order by ID ROWS BETWEEN
                  UNBOUNDED PRECEDING AND 1 PRECEDING ) prev from t
order by id

Пример вывода данных:

        ID        VAL       PREV

---------- ---------- ----------

         1          1

         3         45          1

         4                    45

         5                    45

        10          5         45

        12         48          5

        15         10         48
Categories: SQL Tags: , , , ,

Конвертирование единиц измерения

Пакет inv_convert

FUNCTION inv_um_convert(p_item_id       IN NUMBER,
                        p_from_uom_code IN VARCHAR2,
                        p_to_uom_code   IN VARCHAR2) RETURN NUMBER;

Пример:

select msi.segment1,
       msi.primary_uom_code,
       'кг' as second_uom,
       inv_convert.inv_um_convert(msi.inventory_item_id,'кг',
                                  msi.primary_uom_code) as coefficient
from mtl_system_items_b msi
where msi.primary_uom_code = 'т'
and rownum <= 10