Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Выгрузка приложения и компонент через PL/SQL / 12 сообщений из 12, страница 1 из 1
23.08.2011, 09:05
    #37407163
ArtMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка приложения и компонент через PL/SQL
Доброго времени суток.
Нашел в сети возможность выгрузки приложения и компонент через PL/SQL вместо WEB-а APEX. Работает очень быстро(выгрузка покомпонентная из приложения в 300 стр идет 30-40 сек) . Вот пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
create or replace function export_application(
  p_wsid  in number,
  p_appid in number
) return clob is
    nm  owa.vc_arr;
    vl  owa.vc_arr;

    l_exp_lcnt  number :=  2000000 ;
    l_exp_lines htp.htbuf_arr ;
    l_exp_all   clob;
begin
    nm( 1 ) := 'REMOTE_ADDR';
    vl( 1 ) := '1.2.3.4';
    owa.init_cgi_env( nm.count, nm, vl );
    htp.addDefaultHTMLHdr(false);
    --тут можно делать выгрузку по компонентам
    apex_util.export_application(p_wsid, p_appid);
    htp.get_page(l_exp_lines, l_exp_lcnt);
    dbms_lob.createtemporary(l_exp_all, true, dbms_lob.call);
    for i in  1 ..l_exp_lines.count  loop
      dbms_lob.writeappend(l_exp_all, length(l_exp_lines(i)), l_exp_lines(i));
    end loop;
    return l_exp_all;
end;
Взято отсюда ТЫНЦ .

Запускаю из любой PL/SQL среды, все работает. Если запустить ф-цию в APEX-е, то вылетает ошибка "ПОЛЬЗОВАТЕЛЬ НЕ АВТОРИЗОВАН". В чем может быть дело?
...
Рейтинг: 0 / 0
23.08.2011, 11:55
    #37407520
ArtMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка приложения и компонент через PL/SQL
А как можно вызвать ф-ции от имени другого пользователя?
...
Рейтинг: 0 / 0
24.08.2011, 15:31
    #37410005
SvUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка приложения и компонент через PL/SQL
Не сталкивался, но это недокументированные функции.
Подозреваю owa.init_cgi_env, скорее всего и портит всё, конфликтуя с установками сессии,

советую попробовать через ORACLE JOB
...
Рейтинг: 0 / 0
25.08.2011, 09:29
    #37410969
ArtMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка приложения и компонент через PL/SQL
Вся проблема в apex_util.export_application_component, из-за нее проблема. Если использовать apex_util.export_application, то все хорошо проходит. Обошел через внешний jar-файл (там вызвал удаленную процедуру).

Про Oracle Job - это сделать job, который потом запустить?
...
Рейтинг: 0 / 0
25.08.2011, 09:55
    #37411030
SvUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка приложения и компонент через PL/SQL
Да.

Можно чуть поподробней как у вас реализовано взаимодействие с явой из апекса: (другим пригодится и мне тоже)
ArtManОбошел через внешний jar-файл (там вызвал удаленную процедуру)
...
Рейтинг: 0 / 0
25.08.2011, 14:03
    #37411703
ArtMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка приложения и компонент через PL/SQL
Изначально задача стояла выгружать изменившиеся объекты Apex в SVN.
Написал пакет, который использует описанную выше ф-цию для получения CLOB с содержанием компонент ( вместо apex_util.export_application использую apex_util.export_application_сomponent) и сохраняет их в файл на диск. Взял svnkit.jar, который может делать отправку в SVN. Написал внешний jar-ник, который принимает параметры для подключения к БД и выполняет мой пакет формирования файла выгрузки. Потом мой jar-ник вызывает svnkit для отправки файлов в SVN. Далее написал java class запуска любых jar-ников с параметрами на диске (Starter). Сделал обертку для Starter. В Apex при нажатии на кнопку вызываю обертку Starter-а с параметрами для внешнего jar-ника, который формирует файлы выгрузки и отправляет их в SVN.
...
Рейтинг: 0 / 0
26.08.2011, 15:36
    #37413809
SvUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка приложения и компонент через PL/SQL
Может кто-нибудь делал скрипт, по переносу всех объектов APEX из одной базы в другую? (workspaces, applications, files, images...)
...
Рейтинг: 0 / 0
28.09.2011, 13:24
    #37458918
haXbat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка приложения и компонент через PL/SQL
ArtManЗапускаю из любой PL/SQL среды, все работает. Если запустить ф-цию в APEX-е, то вылетает ошибка "ПОЛЬЗОВАТЕЛЬ НЕ АВТОРИЗОВАН". В чем может быть дело?
Эта ошибка появляется при запуске процедуры эскпорта под схемой отличной от парсинг схемы экспортируемоего приложения. Это значит, что если у вас парсинг схема приложения PS1, то под PS1 из PL/SQL среды все отработает корректно. Но под SYS выскочит ошибка, и в апексе будет ошибка, т.к. он работает через схему ANONYMOUS/APEX_PUBLIC_USER. Поэтому необходимый фунционал выгрузки объектов APEX в SVN можно реализовать через Job+Package в схеме PS1.
...
Рейтинг: 0 / 0
08.11.2011, 11:01
    #37515655
ArtMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка приложения и компонент через PL/SQL
Перешел на версию 4.1 и все выгрузки перестали работать. Пишет ошибку
ORA-20987: APEX - Unauthorized access.
Пробовал через пользователя APEX_040100, тоже никак.
...
Рейтинг: 0 / 0
08.12.2011, 14:34
    #37565280
ArtMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка приложения и компонент через PL/SQL
Нашел решение для выгрузки объектов приложения через PL/SQL

wwv_flow_gen_api2.export

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
procedure export (
    -- This procedure exports flows
    --
    -- p_flow_id...................Unique ID number of your flow
    -- p_page_id...................Optional Page ID number
    -- p_format....................Output format UNIX, DOS, DB, XML
    -- p_commit....................Generate a commit statement at end of script (YES or NO)
    -- p_owner_override............Set the application owner to this USER and not the current flows owner attribute
    -- p_flashback_min_ago.........Set the export procedure to use flashback mode
    -- p_file_id...................Use optionally when exporting into DB format
    -- p_export_comments...........Export comments in with the file
    -- p_export_ir_public_reports..Export Public Interactive Reports
    -- p_export_ir_private_reports.Export Private Interactive Reports
    -- p_export_ir_notifications...Export Interactive Report Notification Settings
    -- p_debugging_override........Set the application debugging status to this value (1 = Yes, 0 = No)
    --
    p_flow_id                     in number,
    p_page_id                     in number   default null,
    p_format                      in varchar2 default 'UNIX',
    p_commit                      in varchar2 default 'YES',
    p_owner_override              in varchar2 default null,
    p_build_status_override       in varchar2 default 'NO',
    p_flashback_min_ago           in number   default null,
    p_file_id                     in number   default null,
    p_export_comments             in varchar2 default 'N',
    p_export_ir_public_reports    in varchar2 default 'N',
    p_export_ir_private_reports   in varchar2 default 'N',    
    p_export_ir_notifications     in varchar2 default 'N',
    p_debugging_override          in number   default null,
    p_component                   in varchar2 default null,
    p_component_id                in number   default null
    )
    ;



Только вот проблема, работает только из среды APEX. При попытке сделать через pl/sql вылетает ошибка "Неверный размер буфера". А при запуске из APEX после окончания работы появляется белая страница wwv_flow.accept, никак от нее не могу избавиться. Кто знает как избавиться от белой страницы?
...
Рейтинг: 0 / 0
18.06.2012, 15:36
    #37842841
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка приложения и компонент через PL/SQL
ArtMan,При попытке сделать через pl/sql вылетает ошибка "Неверный размер буфера"

Выполняю под system через pl/sql developer
Код: plsql
1.
apex_040100.wwv_flow_gen_api2.export(103);


Результат - 100 000 строк в htp output, без ошибок

ArtMan,А при запуске из APEX после окончания работы появляется белая страница wwv_flow.accept, никак от нее не могу избавиться. Кто знает как избавиться от белой страницы?

Попробовал, сложностей не возникло, примерно так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare
  p_schema varchar2(30);
begin
  select t.schema into p_schema
  from dba_registry t
  where comp_id = 'APEX';

  htp.init;

  owa_util.mime_header( 'application/text', FALSE );
  htp.p('Content-Disposition:  attachment; filename="export.txt"');
  owa_util.http_header_close;

  execute immediate( 'begin ' 
                            || p_schema || '.wwv_flow_gen_api2.g_mime_shown := true;'
                            || p_schema || '.wwv_flow_gen_api2.export(103,24); '
                  || 'end;' );
  apex_application.stop_apex_engine;
end;
...
Рейтинг: 0 / 0
18.06.2012, 17:30
    #37843052
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка приложения и компонент через PL/SQL
Пример с чтением htp буфура
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
create or replace procedure exp_page( p_app_id number, p_page_id number )
as
  i number;
  v_out_buf htp.htbuf_arr;
  v_out_row_count number := 99999999;
  v_document_blob blob;
  params owa.vc_arr;
begin
  owa.init_cgi_env(params);
  apex_040100.wwv_flow_gen_api2.export( p_app_id, p_page_id );
  owa.get_page(v_out_buf, v_out_row_count);
 
  dbms_lob.createtemporary(v_document_blob, true, dbms_lob.session);
  for i in 1..v_out_row_count loop    
    dbms_lob.writeappend(v_document_blob, utl_raw.length(utl_raw.cast_to_raw(v_out_buf(i))), utl_raw.cast_to_raw(v_out_buf(i)));
  end loop;
  
  insert into asdasd(val)
  values( v_document_blob );
  
  dbms_lob.freetemporary(v_document_blob);
end;
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Выгрузка приложения и компонент через PL/SQL / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]