Просмотр лога и 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)
Регулярные выражения произошли из теорий автоматов и формальных языков, поэтому поначалу производят устрашающее впечатление. Однако, их базовые понятия являются простыми и в то же время мощными.
Начиная с версии Oracle 10g регулярные выражения можно использовать напрямую в SQL запросах.
Шаблон регулярных выражений выражается в виде строки, содержащей следующие конструкции:
- Литеральные символы. Фактические символы, которые следует искать (Например, шаблон xyz соответствует только вхождению «xyz»)
- Метасимволы. Операции, определяющие алгоритмы, которые должны применяться во время поиска (Например, шаблон ^xyz соответсвует только строке, начинающейся с «xyz» — другие вхождения не учитываются)
Читать дальше про “Регулярные выражения Oracle (regular expression)” »
Сгенерировать строки с числами
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>
Вывод сообщения в лог (для concurrent)
-- Вывод сообщения в лог procedure output_log_data(p_log_str in varchar2) is g_output_dbms number := 1; -- Вывод сообщений в dbms_output.put_line g_output_oebs number := 2; -- Вывод сообщений в fnd_file.put_line v_output_current number := g_output_oebs; begin if fnd_global.conc_request_id = -1 then v_output_current := g_output_dbms; end if; if v_output_current = g_output_dbms then dbms_output.put_line(p_log_str); elsif v_output_current = g_output_oebs then --fnd_file.put_line(fnd_file.output, p_log_str); --Строка выводится в "Просмотр Результатов" fnd_file.put_line(fnd_file.log, p_log_str); --Строка выводится в "Просмотр Журнала" end if; end output_log_data;
OAF Standard CSS Introduction
OraDataNumber
Пример отображения стиля |
OraPromptText
Пример отображения стиля |
Добавление отчета в меню
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;
Замена кратных пробелов на один
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
Извлечь подстроки используя разделители
Для того чтобы разбить строку на подстроки, используя разделитель «;», можно воспользоваться следующим запросом.
Разделитель, конечно, может быть разный.
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.
Другие примеры…
Читать дальше про “Извлечь подстроки используя разделители” »
Сбор статистики
Для сбора статистики используем процедуру
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;
Последние комментарии