Oracle DB, Oracle APEX, Linux etc.

Показаны сообщения с ярлыком oracle apex. Показать все сообщения
Показаны сообщения с ярлыком oracle apex. Показать все сообщения

четверг, 14 марта 2013 г.

Oracle APEX: Remote Debug

Случайно узнал, что можно включить удалённую отладку установкой в URL значения REMOTE для аргумента Debug. При этом подключение для удалённой отладки происходит в самом начале этапов Page Processing и Page Rendering и создаётся к удалённому хосту из переменной REMOTE_ADDR окружения CGI на порт 4000.

В документации об этом почему-то ни слова.

Пользуясь случаем, напоминаю, что уровнем отладки (и количеством выдаваемой информации) можно управлять, используя значения LEVELn для аргумента Debug, где n -- уровень отладки от 1 до 9. По умолчанию, для значения YES используется уровень 4.

Читать далее

четверг, 14 февраля 2013 г.

Oracle APEX: Report Template Preview

Да, я знаю, что обещал заметку о том, как создавать плагин-регион. Но пока я её готовлю, могу предложить описание поиска ошибки в APEX Application Builder и её исправления.

Ошибка заключается в том, что в APEX уже довольно давно поломался предпросмотр шаблонов отчётов.


Для шаблонов страниц работает, для регионов тоже, а отчёты показывают крайне информативное сообщение:
report error: 
ORA-01002: fetch out of sequence

Как всё поправить? Для начала, нужно разобраться, что выполняется на странице. Смотрим в адресную строку:
/apex/f?p=4000:245:7846987198961::::F4000_P245_ID:2451412072364242

Заглядываем в словарь APEX, что там за регионы на странице 245 приложения 4000:
column region_name format a20
column region_id format 999999999999999999999999
column source_type format a15
column region_source format a80
set long 700
select region_name, region_id, source_type, region_source 
  from apex_040200.apex_application_page_regions 
 where application_id = 4000 and page_id = 245
/
REGION_NAME                          REGION_ID SOURCE_TYPE     REGION_SOURCE                                                                  
-------------------- ------------------------- --------------- --------------------------------------------------------------------------------
Breadcrumb                    6539000463209372 Breadcrumb                                                                                       
Template Preview             14562627207747006 PL/SQL          wwv_render_report3.show(                                                         
                                                                   p_query => '                                                                 
                                                               select 1 COL1, ''[...]'' COL2, ''[...]                                           

Template Preview             14573702151806062 HTML/Text       

This page provides a preview of the identified report template.

Template Details 82014114667920662 Report select ROW_TEMPLATE_NAME N, ROW_TEMPLATE_TYPE T from WWV_FLOW_ROW_TEMPLATES preview-report 88449328191587806 Report select 1 COL1, '[...]' COL2, '[...]' COL3, sysdate COL4 from dual union select

Судя по названиям и содержимому, нас интересуют регионы с REGION_ID 14562627207747006 и 88449328191587806. Первый выполняет обращение к wwv_render_report3.show, второй, как мы сейчас увидим, служит для хранения настроек, которые используются в этом вызове:
column region_source format a700
set long 700
select region_id, region_source 
  from apex_040200.apex_application_page_regions 
 where region_id in (14562627207747006, 88449328191587806)   
/
REGION_ID REGION_SOURCE
------------------------- --------------------------------------------------------------------------------
        14562627207747006 wwv_render_report3.show(
                              p_query => '
                          select 1 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union
                          select 2 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union
                          select 3 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union
                          select 4 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union
                          select 5 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union
                          select 6 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual
                          order by 1',
                              p_row_template_id => :f4000_p245_id,
                              p_region_id => 88449328191587806
                            );

        88449328191587806 select 1 COL1, '[...]' COL2, '[...]' COL3, sysdate COL4 from dual union
                          select 2 COL1, '[...]' COL2, '[...]' COL3, sysdate COL4 from dual union
                          select 3 COL1, '[...]' COL2, '[...]' COL3, sysdate COL4 from dual union
                          select 4 COL1, '[...]' COL2, '[...]' COL3, sysdate COL4 from dual union
                          select 5 COL1, '[...]' COL2, '[...]' COL3, sysdate COL4 from dual union
                          select 6 COL1, '[...]' COL2, '[...]' COL3, sysdate COL4 from dual
                          order by 1
Значит, путь наш лежит в wwv_render_report3.show. Чтобы посмотреть, что именно там происходит, потребуется разврапировать тело пакета и установить его в схему APEX. Тело находится в файле reports3.plb.

Затем включить удалённую отладку, для чего потребуется скомпилировать этот пакет с поддержкой отладки. Ещё в рамках подготовки к удалённой отладке потребуется временно изменить содержимое региона 14562627207747006, окружив вызов обращениями к dbms_debug_jdwp:
update wwv_flow_page_plugs 
   set plug_source = q'{dbms_debug_jdwp.connect_tcp('localhost',50001);  
wwv_render_report3.show(
    p_query => '
select 1 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union 
select 2 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union 
select 3 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union 
select 4 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union 
select 5 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union 
select 6 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual 
order by 1',
    p_row_template_id => :f4000_p245_id,
    p_region_id => 88449328191587806
  );
dbms_debug_jdwp.disconnect;}'
 where id = 14562627207747006
/
Я использую localhost как имя удалённого хоста, потому что пробросил через SSH свой порт 4000, на котором работает Debug Listener, на порт 50001 сервера с Oracle. Если файерволы Вам позволяют, можете вместо localhost указывать IP машины, на которой работает OSD с удалённой отладкой, тогда порт необходимо указать тот, который выбрали при запуске Remote Debug.


Итак, подготовились к отладке, запустили Remote Debug, зашли на страницу с предпросмотром шаблона отчёта. Началась отладка. За несколько итераций становится ясно, что ошибка возникает при попытке фетчить открытый курсор с запросом отчёта, который ещё не был выполнен. А происходит это, потому что в вызове wwv_render_report3.show не указано значение параметра p_plug_source_type. Исправляем:
update wwv_flow_page_plugs 
   set plug_source = q'{wwv_render_report3.show(
    p_query => '
select 1 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union 
select 2 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union 
select 3 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union 
select 4 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union 
select 5 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual union 
select 6 COL1, ''[...]'' COL2, ''[...]'' COL3, sysdate COL4 from dual 
order by 1',
    p_row_template_id => :f4000_p245_id,
    p_region_id => 88449328191587806,
    p_plug_source_type => 'SQL_QUERY'
  );}'
 where id = 14562627207747006
/

Проверяем:


Вот так ищутся и правятся небольшие баги в APEX. Не забывайте делиться своими решениями.

Читать далее

понедельник, 15 октября 2012 г.

APEX 4.2 ушёл в печать!

http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html

PS: Что-то я редко стал сюда что-нибудь добавлять... Потому анонс: в следующих сообщениях расскажу о создании плагинов. Начнём с плагина-региона.
Читать далее

суббота, 10 марта 2012 г.

Oracle APEX Listener: Файл настроек

Это небольшая заметка о файле настроек Oracle APEX Listener (OAL), развёрнутом на GlassFish 3.

По умолчанию OAL создаёт и ищет файл настроек ${java.io.tmpdir}/apex/apex-config.xml, где значение java.io.tmpdir для GlassFish установлено в /tmp. Любые временные директории — не место для хранения файлов настроек, поскольку время от времени их содержимое удаляется.

Чтобы изменить это поведение раз и навсегда, необходимо:
  1. Распаковать файл apex.war. Это обычный zip-архив, проблем с разархивацией возникнуть не должно. Например, разархивируем архив в директорию tmp:
    unzip -d tmp apex.war
  2. Изменить параметр config.dir в файле WEB-INF/web.xml. Найдём в нём следующие строки, устанавливающие значение параметра:
    <!--
      <context-param>
        <param-name>config.dir</param-name>
        <param-value>${java.io.tmpdir}/APEX</param-value>
      </context-param>
    -->
    
    Раскомментируем и заменим значение параметра:
      <context-param>
        <param-name>config.dir</param-name>
        <param-value>${user.dir}</param-value><
      </context-param>
    
    Параметр user.dir для приложения, развёрнутого на GlassFish в домен domain_1, будет иметь значение <Директория GlassFish>/glassfish/domains/domain_1/config. OAL создаст по этому пути поддиректорию apex и разместит файл настроек apex-config.xml в ней.
  3. Создать архив apex.war с изменённым файлом. Перейдём в директорию tmp и соберём архив:
    zip -r apex.war ./*

Всё, архив с приложением готов к установке.

Читать далее

пятница, 5 августа 2011 г.

Oracle APEX: Процедуры в URL - Z

Последняя из "маленьких" встроенных процедур APEX, которые можно использовать в URL: Z.

Эта процедура используется для подсчёта кликов по ссылкам. Обёрткой вокруг неё является APEX_UTIL.COUNT_CLICK, поэтому можно смело ориентироваться на документацию, меняя в примерах APEX_UTIL.COUNT_CLICK на Z. У Z есть следующие параметры:

  • p_url — URL, к которому необходимо перейти.
  • p_cat — категория, к которой Z причисляет клик.
  • p_id — вторичный числовой идентификатор клика. ID приложения, номер страницы — всё то, что поможет Вам в дальнейшем выделить именно эти клики из остальных.
  • p_user — пользователь, который сделал клик.
  • p_company, p_workspace — ID рабочего пространства. Если p_company пустое, то используется p_workspace. Если оба эти параметра пустые, то Z не сохраняет информацию о клике, а просто перенаправляет на p_url.

Пример URL с этой процедурой:

z?p_url=w3.org&p_cat=w3c&p_company=&WORKSPACE_ID.

Информацию, собранную Z, можно просмотреть в представлении APEX_WORKSPACE_CLICKS.


Сообщения по теме:
Oracle APEX: Процедуры в URL - F
Oracle APEX: Процедуры в URL - P

Читать далее

четверг, 4 августа 2011 г.

Oracle APEX: Процедуры в URL - P

Ещё одна используемая при создании URL процедура: P.

Она не завраплена, так что её код можно легко увидеть:

create or replace
procedure p (
    n       in varchar2 default null,
    p_mime_type in varchar2 default null,
    p_inline    in varchar2 default 'NO')

-- Copyright (c) Oracle Corporation 2001. All Rights Reserved.
--
--    DESCRIPTION
--      View a page given a page ID
--
--    SECURITY
--      Public shortcut
--
--    NOTES
--
--    EXAMPLES:
--

is
begin
     if n is null then
         htp.p(wwv_flow_lang.system_message('p.valid_page_err'));
         return;
     end if;
     --
     wwv_flow_file_mgr.get_file (
        p_id => n,
        p_mime_type => p_mime_type,
        p_inline => p_inline);
end p;

P используется, чтобы скачать загруженные файлы, которые можно найти в представлении APEX_APPLICATION_FILES (aka WWV_FLOW_FILES, построено на таблице FLOW_FILES.WWV_FLOW_FILE_OBJECTS$). У этой процедуры не так много параметров:
  • n — ID файла, который необходимо скачать.
  • p_mime_type — устаревший параметр для указания MIME-типа файла. Сейчас информация берётся из соответствующих столбцов записи в APEX_APPLICATION_FILES.
  • p_inline — NO, чтобы предложить пользователю скачать файл; YES, чтобы браузер отобразил его.
Пример относительного URL для скачивания файла с ID=1234567891011:
p?n=123456789101112&p_inline=NO


Сообщения по теме:
Oracle APEX: Процедуры в URL - F
Oracle APEX: Процедуры в URL - Z

Читать далее

среда, 20 июля 2011 г.

Oracle APEX: Процедуры в URL - F

В APEX переход по страницам приложения - это обращение к процедурам. И одной из самых используемых процедур является F. Чтобы увидеть её, можно просто почаще смотреть в строку адреса во время работы с APEX. Там обнаружится что-то вроде такого:

http://work:8080/apex/f?p=4000:1500:434361572702804:::::

С помощью этой процедуры можно создавать ссылки к различным страницам приложений APEX. Я не буду здесь повторять раздел документации Oracle® Application Express Application Builder User's Guide: 2 Application Builder Concepts - Understanding URL Syntax. По крайней мере, ту его часть, которая описывает структуру значений параметра P. Давайте лучше поговорим о том, что упоминается не так часто.

Итак, F - это своеобразная обёртка для WWV_FLOW.SHOW (aka APEX_APPLICATION.FLOW). В этой процедуре устанавливаются различные глобальные переменные, использующиеся для отображения страницы, параметр P разбирается на составляющие, которые передаются в APEX_APPLICATION.FLOW.

Кроме параметра P у процедуры F есть ещё параметры. Часть из них описана в документации, часть можно увидеть в URL при работе с приложениями. Вот неполный список:

  • p_sep - разделитель, который используется, чтобы разбить значение параметра P в PL/SQL-коллекцию.
  • p_trace - если равен "YES", apex_application.show будет создавать трассировочный файл. Подробнее в документации: Enabling SQL Tracing and Using TKPROF.
  • c - workspace_id или название (workspace) рабочего пространства из apex_workspaces. По значению этого параметра выбирается и устанавливается группа безопасности (aka security group ID). Это понадобится, к примеру, при вызове страниц приложения с тем же псевдонимом в другом рабочем пространстве. Упоминается в документации: Calling a Page Using an Application and Page Alias.
  • cs - контрольная сумма, которой проверяются значения параметров. Первый символ - тип кинтрольной суммы, остальная строка - собственно контрольная сумма.
  • success_msg - текст для отображения сообщения об успешном выполнении.
  • notification_msg - текст для отображения уведомления.
  • tz, p_lang, p_territory - NLS-параметры: временная зона, язык и территория. Значением p_lang можно менять язык сессии, который используется при переводе приложения с настройкой Application Language Derived From = Session.

Сообщения по теме:
Oracle APEX: Процедуры в URL - P
Oracle APEX: Процедуры в URL - Z

Читать далее

пятница, 8 июля 2011 г.

Oracle APEX: Убить Билла

Как удалить вручную сессию APEX, если известен её ID? Всё довольно просто.

Для начала подумаем, где должна использоваться возможность удаления сессии. Правильно, там где пользователь завершает сеанс в приложении - смотрим на ссылку LOGOUT_URL:

http://localhost:8888/apex/wwv_flow_custom_auth_std.logout?p_this_flow=4000&p_next_flow_page_sess=4550:8:8297564516445573

Нужное нам находится в wwv_flow_custom_auth_std.logout. Давайте глянем ещё на процесс, который выполняется при принудительном удалении сессий администратором экземпляра APEX. Заходим в Administration->Application Express Internal Administration, переходим на Manage Instance->Session State->Purge Session, by age. Это страница 66 приложения 4050. Посмотрим, что за процессы выполняются при обработке этой страницы:

set long 5000
select process_source 
  from apex_application_page_proc 
 where application_id = 4050 and page_id = 66;

PROCESS_SOURCE
--------------------------------------------------------------------------------
wwv_flow_cache.purge_oldest_sessions (
p_num_sessions_to_purge     => :P66_MAX_SESSIONS,
p_purge_sess_older_then_hrs => :P66_AGE * 24);

Ещё одна наводка - пакет wwv_flow_cache с множеством процедур purge_%.

Произведя ритуал Unwrap над этими пакетами, можно увидеть, что удаляется сессия APEX с идентификатором :p_id довольно просто:

delete apex_040000.wwv_flow_sessions$ where id = :p_id;

Всё, остальные изыски из этих процедур вроде подсчёта удалённых сессий, переноса их в wwv_flow_purged_sessions$ и изменения значения в печеньке на -1 нам не нужны.

Убить Билла сессию APEX - проще простого. Была бы лицензия на убийство в виде соответствующей привилегии на таблицу apex_040000.wwv_flow_sessions$...
Читать далее

понедельник, 7 февраля 2011 г.

Oracle APEX: Collections Debug

Самый простой, хоть и не очень честный способ отладки при работе с коллекциями APEX - смотреть в таблицы wwv_flow_collections$ и wwv_flow_collection_members$ схемы, в которую установлен APEX. Если, конечно, есть соответствующие права, и известны приложение (FLOW_ID) и сессия (SESSION_ID), работающие с коллекцией.
Читать далее

пятница, 10 декабря 2010 г.

Oracle APEX: Медвежья услуга при копировании страницы

С прискорбием вынужден сообщить, что как минимум в версиях 3.2.1 и 4.0.1 я наткнулся на неприятный баг. При копировании страницы автоматически заменяются имена старых элементов: PMXXX заменяется на PNXXX, где M и N - номера оригинальной страницы и копии, соответственно. Проблема в том, что стоило бы заменять PM_XXX.

Для примера: у нас есть страница 5, которая где-то - в переходах, в значении элемента, в процессах - ссылается на элемент P52_X страницы 52. Теперь мы решили скопировать страницу 5 с новым номером 60. После копирования новая страница будет ссылаться на несуществующий элемент P602_X: было 52, стало 602.

Вот такая неприятная штука.
Читать далее

понедельник, 15 ноября 2010 г.

Oracle APEX + Oracle SQL Developer = Сила двух

Предлагаю вниманию читателей перевод одной статьи. Она понравилась мне объяснением возможностей удалённой отладки, и я решил перевести её целиком. Надеюсь, она пригодится...

Сила двух
Дэвид Пик
Перевод: Александр Поливаный 

Использование Oracle SQL Developer при разработке в Oracle Application Express.

Oracle Application Express (Oracle APEX) и Oracle SQL Developer (OSD) — это бесплатные инструменты, оба работающие с Oracle Database версии 9.2 и выше. OSD не только помогает Вам в разработке приложений БД, но также даёт Вам возможности просмотра, экспорта, импорта, внедрения и удалённой отладки Ваших приложений Oracle APEX.

Эта статья покажет, как OSD и Oracle APEX работают вместе, способствуя разработке. Мы увидим, как можно просматривать информацию о приложениях Oracle APEX из OSD. Затем мы пройдёмся по примеру удалённой отладки PL/SQL-кода, выполняющегося в браузерном приложении, из OSD.


Введение


Используя OSD в связке с Oracle APEX, Вы можете просматривать несколько приложений и страниц и быстро добираться до конкретных данных. К примеру, в Oracle APEX Вам потребуется два браузера, чтобы глядеть* на код двух списков значений (list of values, LOV) в двух разных приложениях одновременно. В OSD всё, что нужно - развернуть оба приложения в списке подключений (Connections). Также OSD специально для Oracle APEX предоставляет несколько очень полезных и подробных отчётов о приложениях, страницах, схемах и рабочих пространствах (категория Data Dictionary Reports в отчётах).

OSD позволяет Вам экспортировать, импортировать и внедрять приложения во многих рабочих пространствах, экземплярах APEX и базах данных. ПКМ на названии приложения вызывает контекстное меню, при помощи которого можно переносить приложение с его вспомогательными объектами из одного рабочего пространства в другое. Эта возможность особенно полезна при внедрении приложений из разработки в тестирование или производство.

Вы можете копировать SQL-код из Ваших регионов, списков значений и проверок, вставлять их в SQL Worksheet в OSD и выполнять. OSD даст Вам ввести значения для связываемых переменных и запустить EXPLAIN PLAN или AUTOTRACE для запроса, чтобы обнаружить проблемы с производительностью и настроить SQL.

Для примеров в этой статье требуются Oracle APEX 3.0.1 и выше и OSD 1.2.1 и выше. (Обратите внимание, что Вы не сможете выполнить примеры, используя Oracle APEX на apex.oracle.com.) Вам также потребуется рабочее пространство Oracle APEX, связанное со схемой-примером HR, доступной в БД по умолчанию.


Просмотр информации Oracle APEX


Создайте подключение в OSD к схеме HR. Для пошаговых инструкций по созданию подключений в OSD читайте статью "Making Database Connections" в этом выпуске Oracle Magazine.**

Когда соединение установится, Вы сможете увидеть пункт Application Express под подключением HR в списке подключений (Connections), как показано на рисунке (под подключением XE Dpeake):

Пункт Application Express в Oracle SQL Developer


Теперь Вы можете просмотреть приложения Oracle APEX пользователя HR, используя закладки с подробной информацией:
Закладки с подробной информацией о приложении



Удалённая отладка


Вы можете использовать OSD для удалённой отладки PL/SQL-кода. Эта возможность особенно полезна в случае, когда приложение не прекращает выполнение, но и не даёт результатов, которые Вы ожидали. Чтобы потренироваться, выполните следующие шаги для отладки процедуры в упакованном приложении Oracle APEX "Asset Manager":

Шаг 1: Получение и установка упакованного приложения. Скачайте, импортируйте и разверните приложение в Oracle APEX.

  1. Скачайте и сохраните asset_manager_1.0.zip с сайта http://www.oracle.com/technetwork/developer-tools/apex/application-express/packaged-apps-090453.html#ASSETS .
  2. Разархивируйте файл.
  3. В OSD подключитесь к схеме HR.
  4. ПКМ по пункту Application Express под HR в списке подключений, выберите Import Application (Импортировать приложение).
  5. Найдите и откройте разархивированную папку asset_manager_1.0, выберите файл asset_manager_installer_1.0.sql.
  6. Нажмите Next (Далее).
  7. Установите флажок Run Install Script (Запустить установочный скрипт) и нажмите Next.

    Импорт и внедрение приложения
  8. Нажмите Finish (Завершить).
  9. Нажмите OK в окне, сообщающем об успешной установке.


Шаг 2: Настройка OSD для удалённой отладки. Подготовьте OSD для отладки процедуры EBA_ASSET.update_status, выполняемой в приложении, удалённо.

  1. В OSD подключитесь к базе данных как пользователь с привилегиями DBA.***
  2. Введите следующий код. Если необходимо, замените PUBLIC на имя пользователя, от имени которого запускается Oracle APEX в mod_plsql.
    grant DEBUG CONNECT SESSION to HR; 
    grant DEBUG on HR.EBA_ASSET to PUBLIC;
  3. Нажмите кнопку Run Script (или нажмите F5).
  4. Подключитесь как HR.
  5. В Подключениях откройте пункт Packages (Пакеты) и нажмите EBA_ASSET.
  6. ПКМ по телу пакета EBA_ASSET и выберите Edit (Править).
  7. ПКМ по левому полю в редакторе кода, выберите Toggle Line Numbers (Отображать номера строк).
  8. Перейдите вниз, к строке 113, ПКМ по левому полю в редакторе кода, выберите Toggle Breakpoint (Установить точку остановки).
  9. ПКМ по коду, выберите Compile for Debug (Компилировать для отладки). Заметьте, что выполнение пакета в режиме отладки сильно помешает производительности. Когда тестирование закончится, Вам стоит перекомпилировать пакет без отладочной информации.
  10. ПКМ по подключению HR в Подключениях, выберите Remote Debug (Удалённая отладка).

    Oracle SQL Developer настроен для удалённой отладки
  11. Нажмите OK.


Шаг 3: Настройка Oracle APEX для отладки. Подготовьте Oracle APEX к отладке процедуры EBA_ASSET .update_status:

  1. Войдите в Oracle APEX как разработчик соответствующего рабочего пространства - того, в которое Вы установили приложение "Asset Manager".
  2. Нажмите Application Builder.
  3. Нажмите Asset Manager 1.0.
  4. Откройте страницу 11 - Inventory Details.
  5. В Процессах (Processes) нажмите Update Asset Status.
  6. В поле Source замените код на следующий:
  7. IF :DEBUG = 'YES' THEN
         dbms_debug_jdwp.connect_tcp('localhost',4000);
    END IF;
    eba_asset.update_status(:P11_ASSET_ID);
    IF :DEBUG = 'YES' THEN
         dbms_debug_jdwp.disconnect;
    END IF;
    Этот код будет срабатывать только тогда, когда страница запущена в режиме отладки. Второй блок IF отключает отладочную сессию.
  8. Нажмите Apply Changes (Применить изменения).

Шаг 4: Запуск приложения. Запустите приложение "Asset Manager" в Oracle APEX, вначале в обычном режиме, а затем - в режиме отладки.

  1. В Oracle APEX вернитесь назад, к странице 1 и нажмите Run (Запустить).
  2. Войдите в приложение как HR.
  3. Выберите Assets.
  4. Нажмите иконку редактирования для любой записи.
  5. Нажмите иконку редактирования для записи остатков. Поменяйте значение поля Status (статус).
  6. Нажмите Apply Changes. Приложение нормально обработает изменения, потому оно запущено не в режиме отладки.
  7. Нажмите иконку редактирования для той же записи остатков.
  8. Нажмите Debug (Отладка) на панели инструментов разработчика.
  9. Панель инструментов разработчика в Oracle APEX
  10. Поменяйте статус и нажмите Apply Changes.
  11. Теперь OSD должен перехватить фокус ввода. (Если этого не произошло, то приложение будет показывать частично завершённый процесс загрузки страницы, и Вам нужно будет открыть окно OSD самостоятельно.)
  12. Используйте инструменты OSD, чтобы возобновить выполнение, выполнять отладку пошагово с обходом и со входом в процедуру. Во время отладки процедуры Вы можете видеть изменения значений в переменных и в данных.

Когда процедура закончит выполнение, удалённый отладчик отсоединится.

Вы можете использовать удалённую отладку, чтобы пошагово пройти сквозь сложную PL/SQL обработку, которая не выполняет предназначенное. Наблюдение за значениями переменных и данных во время отладки программы помогает определить ошибку в логике.


Заключение


Вы можете использовать Oracle SQL Developer, чтобы выполнять следующие задачи, когда Вы разрабатываете приложения Oracle Application Express:

  • Быстрое перемещение между компонентами Ваших приложений.
  • Экспорт, импорт и внедрение приложений.
  • Настройка SQL.
  • Удалённая отладка PL/SQL.

Сочетание Oracle SQL Developer и Oracle Application Express может дать Вам значительный рост производительности в разработке Web-приложений.

Примечания переводчика

 
* Дэвид не досказывает либо лукавит, говоря "глядеть" (to view) вместо "работать". Чтобы глядеть, хватит и двух закладок в браузере. Естественно, что все необходимые переменные сессии APEX — рабочее пространство, номер приложения, номер страницы — будут устанавливаться в зависимости от последнего открытого LOV. Кроме того, для одновременной работы с двумя приложениями в одном браузере можно использовать дублирование DNS-имён хоста с APEX. Подробней можно почитать здесь: Martin Giffy D'Souza on Oracle APEX - APEX: How to Develop in 2 Browser Tabs.

** Или просто нажмите F1 и читайте раздел справки SQL Developer Concepts and Usage->Database Connections.

*** Имеется в виду пользователь с правами, достаточными для выдачи привилегий DEBUG CONNECT SESSION и DEBUG HR.EBA_ASSET.

Читать далее

четверг, 21 октября 2010 г.

Oracle APEX: Кому дать привилегии?

В ситуации, когда приложение работает с несколькими схемами БД, часто возникает вопрос: какому пользователю дать привилегии на запрос/DML/выполнение, чтобы приложение спокойно могло обращаться к объектам этих схем? Ответ прост: дайте привилегии пользователю-владельцу схемы разбора приложения (aka parsing schema). Вы можете узнать имя пользователя, зайдя в Application->Edit Application Properties и глянув на Name->Parsing Schema. Также можно выполнить запрос:
select owner from apex_applications where application_id = :p_your_app_id;
Это тот пользователь, от имени которого выполняются все операторы и PL/SQL-блоки в Вашем приложении, так что именно ему требуется права на всё, с чем работает приложение.

Кое-кто предпочитает дать привилегии всем, дав их роли PUBLIC, но на мой взгляд, простота часто не стоит безопасности. Лучше пожертвовать временем и дать привилегии тем, кому они действительно нужны, чем пожертвовать безопасностью.

Если кто-то заинтересовался, как же в сессии пользователя ANONYMOUS/APEX_PUBLIC_USER выполняются операторы и PL/SQL-код с правами пользователя-владельца схемы разбора, то можно поискать в Сети информацию про недокументированный пакет DBMS_SYS_SQL.

Надеюсь, что вопрос исчерпан. Удачи!
Читать далее