Архив

Публикации с меткой ‘SQL’

Установка профилей для пользователя

14 Май 2010 2 comments

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

DECLARE
 l_user_name varchar2(100) := 'USER_NAME';

 PROCEDURE set_profile_at_user_level(p_user_name                fnd_user.user_name%TYPE,
                                     p_user_profile_option_name fnd_profile_options_vl.user_profile_option_name%TYPE,
                                     p_profile_option_value     fnd_profile_option_values.profile_option_value%TYPE) IS
   l_user_id             fnd_user.user_id%TYPE;
   l_profile_option_name fnd_profile_options_vl.profile_option_name%TYPE;
 BEGIN
 
   SELECT fu.user_id
     INTO l_user_id
     FROM fnd_user fu
    WHERE fu.user_name = p_user_name;
 
   SELECT fpo.profile_option_name
     INTO l_profile_option_name
     FROM fnd_profile_options_vl fpo
    WHERE fpo.user_profile_option_name = p_user_profile_option_name;
 
   IF Fnd_Profile.save(x_name        => l_profile_option_name,
                       x_value       => p_profile_option_value,
                       x_level_name  => 'USER',
                       x_level_value => l_user_id) THEN
     NULL;
   END IF;
 
 END set_profile_at_user_level;

BEGIN

  EXECUTE IMMEDIATE 'ALTER session SET NLS_LANGUAGE=''RUSSIAN''';

  set_profile_at_user_level (l_user_name, 'ВЕБ: время ожидания для сеанса','3600000');
  set_profile_at_user_level (l_user_name, 'ВЕБ: форматная маска даты','DD-MM-RRRR');
  set_profile_at_user_level (l_user_name, 'Служебные программы: диагностика','Y');
  set_profile_at_user_level (l_user_name, 'Цветовая схема Java','SWAN');
  
  set_profile_at_user_level (l_user_name, 'Настройка веб-определений','Y');
  set_profile_at_user_level (l_user_name, 'БОП: диагностика','Y');
  set_profile_at_user_level (l_user_name, 'БОП: активизация ссылки области индивидуальной настройки', 'Y');
  set_profile_at_user_level (l_user_name, 'БОП: режим встраивания индивидуальной настройки','Y');
  COMMIT;

END;

Просмотреть профили пользователя

SELECT fpo.profile_option_name
      ,fpo.user_profile_option_name
      ,fpov.profile_option_value
FROM fnd_profile_option_values fpov,
       fnd_profile_options_vl    fpo
WHERE fpov.application_id    = fpo.application_id
      AND fpov.profile_option_id = fpo.profile_option_id
      AND fpov.level_value = (
                        SELECT fu.user_id
                        FROM fnd_user fu
                        WHERE fu.user_name = '!!!USER_NAME'
                       )

Список организаций

Select t.organization_id     as org_id,
       mpv.organization_code as org_code,
       t.name                as org_name
From hr.hr_all_organization_units t,
     mtl_parameters_view mpv
where mpv.organization_id = t.organization_id
order by t.organization_id, mpv.organization_code

Просмотр блокировок

13 Май 2010 2 comments
select distinct
       o.object_name,
       sh.username || '(' || sh.sid || ',' || sh.serial# || ')' Holder,
       sh.osuser,
       sw.username || '(' || sw.sid || ',' || sw.serial# || ')' Waiter,
decode(lh.lmode,
              1,'null',
              2,'row share',
              3,'row exclusive',
              4,'share',
              5,'share row exclusive',
              6,'exclusive') Lock_Type
from v$session   sw,
     v$lock      lw,
     all_objects o,
     v$session   sh,
     v$lock      lh
where lh.id1 = o.object_id
      and lh.id1 = lw.id1
      and sh.sid = lh.sid
      and sw.sid = lw.sid
      and sh.lockwait is null
      and sw.lockwait is not null
      and lh.type = 'TM'
      and lw.type = 'TM'

Model

7 Май 2010 2 comments
Categories: SQL Tags: ,

Разбить строку на строчки по 100 символов, не разбивая слова

2 Апрель 2010 4 comments
with t as (
select 'есть длинная строка - которую нужно разбить на строчки по сто символов.'
           || 'Но слова разбивать нельзя, переносить нужно по '
           ||rpad('qwerty',110,'o')||'абвгд' as s from dual
)
select trim(regexp_substr(s,'(.{0,99}(\s|$))|[^[:space:]]{100}',1,level))
from t
CONNECT BY
 regexp_substr(s,'(.{0,99}(\s|$))|[^[:space:]]{100}',1,level) is not null;

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as apps

SQL> with t as (
  2      select 'есть длинная строка - которую нужно разбить на строчки по сто символов.'
  3              || 'Но слова разбивать нельзя, переносить нужно по '
  4        ||rpad('qwerty',110,'o')||'абвгд' as s from dual
  5  )
  6  select trim(regexp_substr(s,'(.{0,99}(\s|$))|[^[:space:]]{100}',1,level)) as str
  7  from t
  8  CONNECT BY
  9   regexp_substr(s,'(.{0,99}(\s|$))|[^[:space:]]{100}',1,level) is not null;

STR
--------------------------------------------------------------------------------
есть длинная строка - которую нужно разбить на строчки по сто символов.Но слова
переносить нужно по
qwertyoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooабвгд

Заменить подстроку, но только если перед ней пробел или запятая

2 Апрель 2010 5 comments

Для строки «asdfdasf,abs@dev, sdfasdf» надо найти вхождение «abs@» и заменить на «abs@fn», но только в том случае, если перед вхождением запятая или пробел.

select regexp_replace(str, '([, ]abs@)', '\1fn') as val
from (select 'aabs@sdfdasf,abs@dev, sd abs@fasdf' str from dual)
--
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as apps

SQL> select regexp_replace(str, '([, ]abs@)', '\1fn') as val
  2    from (select 'aabs@sdfdasf,abs@dev, sd abs@fasdf' str from dual);

VAL
--------------------------------------
aabs@sdfdasf,abs@fndev, sd abs@fnfasdf

SQL>

Просмотр лога и xml для concurrent`а

Для удобного доступа к логу и xml канкарента, можно использовать следующий запрос

SELECT get_log_bfile('l' || x.request_id || '.req') as log_date,
       get_xml_bfile('o' || x.request_id || '.out') as xml_date
FROM fnd_concurrent_requests x
WHERE x.request_id = :p_request_id

Но перед его использованием следует создать директории для доступа к файлам:

create or replace directory CUNCURRENT_XML
 as '/oracle/NAME_INSTANCE/inst/apps/NAME/logs/appl/conc/out';
create or replace directory CUNCURRENT_LOG
 as '/oracle/NAME_INSTANCE/inst/apps/NAME/logs/appl/conc/log';


и сами функции

create or replace function get_log_bfile(p_filename in varchar2) 
 return bfile as
l_bfile bfile := bfilename('CUNCURRENT_LOG',p_filename);
begin
    return l_bfile;
end;
/
create or replace function get_xml_bfile(p_filename in varchar2 ) 
 return bfile as
  l_bfile bfile := bfilename('CUNCURRENT_XML',p_filename);
begin
    return l_bfile;
end;
/

Регулярные выражения Oracle (regular expression)

31 Март 2010 31 comments


Регулярные выражения произошли из теорий автоматов и формальных языков, поэтому поначалу производят устрашающее впечатление. Однако, их базовые понятия являются простыми и в то же время мощными.
Начиная с версии Oracle 10g регулярные выражения можно использовать напрямую в SQL запросах.

Шаблон регулярных выражений выражается в виде строки, содержащей следующие конструкции:

  • Литеральные символы. Фактические символы, которые следует искать (Например, шаблон xyz соответствует только вхождению «xyz»)
  • Метасимволы. Операции, определяющие алгоритмы, которые должны применяться во время поиска (Например, шаблон ^xyz соответсвует только строке, начинающейся с «xyz» — другие вхождения не учитываются)

Читать дальше про “Регулярные выражения Oracle (regular expression)” »

Сгенерировать строки с числами

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

select column_value from TABLE (sys.odcinumberlist(1,2,3,4,5));

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as apps

SQL> select column_value as val from TABLE (sys.odcinumberlist(1,2,3,4,5));

       VAL
----------
         1
         2
         3
         4
         5

SQL>
Categories: SQL Tags: ,