powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Выгрузка приложения и компонент через PL/SQL
12 сообщений из 12, страница 1 из 1
Выгрузка приложения и компонент через PL/SQL
    #37407163
ArtMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Нашел в сети возможность выгрузки приложения и компонент через 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
Выгрузка приложения и компонент через PL/SQL
    #37407520
ArtMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как можно вызвать ф-ции от имени другого пользователя?
...
Рейтинг: 0 / 0
Выгрузка приложения и компонент через PL/SQL
    #37410005
SvUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не сталкивался, но это недокументированные функции.
Подозреваю owa.init_cgi_env, скорее всего и портит всё, конфликтуя с установками сессии,

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

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

Можно чуть поподробней как у вас реализовано взаимодействие с явой из апекса: (другим пригодится и мне тоже)
ArtManОбошел через внешний jar-файл (там вызвал удаленную процедуру)
...
Рейтинг: 0 / 0
Выгрузка приложения и компонент через PL/SQL
    #37411703
ArtMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изначально задача стояла выгружать изменившиеся объекты 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
Выгрузка приложения и компонент через PL/SQL
    #37413809
SvUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может кто-нибудь делал скрипт, по переносу всех объектов APEX из одной базы в другую? (workspaces, applications, files, images...)
...
Рейтинг: 0 / 0
Выгрузка приложения и компонент через PL/SQL
    #37458918
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtManЗапускаю из любой PL/SQL среды, все работает. Если запустить ф-цию в APEX-е, то вылетает ошибка "ПОЛЬЗОВАТЕЛЬ НЕ АВТОРИЗОВАН". В чем может быть дело?
Эта ошибка появляется при запуске процедуры эскпорта под схемой отличной от парсинг схемы экспортируемоего приложения. Это значит, что если у вас парсинг схема приложения PS1, то под PS1 из PL/SQL среды все отработает корректно. Но под SYS выскочит ошибка, и в апексе будет ошибка, т.к. он работает через схему ANONYMOUS/APEX_PUBLIC_USER. Поэтому необходимый фунционал выгрузки объектов APEX в SVN можно реализовать через Job+Package в схеме PS1.
...
Рейтинг: 0 / 0
Выгрузка приложения и компонент через PL/SQL
    #37515655
ArtMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перешел на версию 4.1 и все выгрузки перестали работать. Пишет ошибку
ORA-20987: APEX - Unauthorized access.
Пробовал через пользователя APEX_040100, тоже никак.
...
Рейтинг: 0 / 0
Выгрузка приложения и компонент через PL/SQL
    #37565280
ArtMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел решение для выгрузки объектов приложения через 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
Выгрузка приложения и компонент через PL/SQL
    #37842841
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Выгрузка приложения и компонент через PL/SQL
    #37843052
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример с чтением 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
12 сообщений из 12, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Выгрузка приложения и компонент через PL/SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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