Самый простой, хоть и не очень честный способ отладки при работе с коллекциями APEX - смотреть в таблицы wwv_flow_collections$ и wwv_flow_collection_members$ схемы, в которую установлен APEX. Если, конечно, есть соответствующие права, и известны приложение (FLOW_ID) и сессия (SESSION_ID), работающие с коллекцией.
Читать далее
Oracle DB, Oracle APEX, Linux etc.
понедельник, 7 февраля 2011 г.
понедельник, 27 декабря 2010 г.
Пара фраз о JSON
Вначале - о проблеме. Сколько раз сталкиваюсь, что JSON-парсер в Firefox вдруг по какой-то причине спотыкается на казалось бы правильной JSON-строке. Решение довольно простое - завернуть эту строку в обычные скобки:
Теперь - о довольно удобном средстве работы с JSON из PL/SQL. Вам хочется организовать эту работу так?
Тогда обратите своё внимание на проект PL/JSON. Думаю, он облегчит Вам жизнь - особенно, если Вы не поленитесь просмотреть короткие уроки.
Читать далее
var result = JSON.parse("("+json_string+")");
Теперь - о довольно удобном средстве работы с JSON из PL/SQL. Вам хочется организовать эту работу так?
declare
l_json json := json();
begin
l_json.put('name', 'Taras');
l_json.put('sons', json_list('["Mykola", "Vasyl"]'));
htp.p(l_result.to_char);
end;
/
Тогда обратите своё внимание на проект PL/JSON. Думаю, он облегчит Вам жизнь - особенно, если Вы не поленитесь просмотреть короткие уроки.
Читать далее
пятница, 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.
Вот такая неприятная штука.
Читать далее
Для примера: у нас есть страница 5, которая где-то - в переходах, в значении элемента, в процессах - ссылается на элемент P52_X страницы 52. Теперь мы решили скопировать страницу 5 с новым номером 60. После копирования новая страница будет ссылаться на несуществующий элемент P602_X: было 52, стало 602.
Вот такая неприятная штука.
Читать далее
понедельник, 29 ноября 2010 г.
Oracle: Consistency и разминка для ума
Допустим, что в одной сессии выполнится следующее:
Затем во второй выполнилось вот это:
Что выведется во второй сессии на экран?
Теперь повторим в первой сессии тот же блок, что и вначале, а во второй выполним:
Каким будет результат?
PS: Ответы и информацию для размышления опубликую через пару дней.
Читать далее
drop table t7; create table t7 as select 1 id, 0 val from dual; insert into t7 values(2, 0); update t7 set val = 1;
Затем во второй выполнилось вот это:
update t7 x set val = (select t.val + 1 from t7 t where t.id = x.id); commit; select * from t7;
Что выведется во второй сессии на экран?
Теперь повторим в первой сессии тот же блок, что и вначале, а во второй выполним:
update t7 x set val = (select x.val + 1 from t7 t where t.id = x.id); commit; select * from t7;
Каким будет результат?
PS: Ответы и информацию для размышления опубликую через пару дней.
Читать далее
суббота, 20 ноября 2010 г.
Oracle APEX: Сколько транзакций в фазе Page Processing?
И правильный ответ... Одна.
Из любопытства я сделал простой тест, чтобы подтвердить, что обработка страницы происходит в одну транзакцию:
0. Создал таблицу и пакет для лога.
1. Создал в APEX страницу с процессом перед проверками, вычислением, проверкой и процессом после вычисления. В каждом из них есть строки:
2. Добавил кнопку и переход на эту же страницу при нажатии.
3. Запустил страницу и нажал на кнопку.
4. Выполнил запрос:
Пропущенные вставки 0, 2 и 4 откатывались оператором ROLLBACK в последующих блоках обработки. Вставка 6 автоматически зафиксировалась при успешном выполнении последнего блока. Так что будьте осторожней, управляя фиксацией и откатом в Вашем коде - Вы можете повлиять на результаты предыдущих блоков.
Читать далее
Из любопытства я сделал простой тест, чтобы подтвердить, что обработка страницы происходит в одну транзакцию:
0. Создал таблицу и пакет для лога.
create table processing_steps (ordr number, msg varchar2(1000 char));
create or replace package proc_stp_pkg
as
procedure reset;
procedure add(p_ordr number, p_msg varchar2);
procedure add_auton(p_ordr number, p_msg varchar2);
end proc_stp_pkg;
/
create or replace package body proc_stp_pkg
as
procedure reset
is
pragma autonomous_transaction;
begin
delete processing_steps;
commit;
end;
procedure add(p_ordr number, p_msg varchar2)
is
begin
insert into processing_steps(ordr, msg) values (p_ordr, p_msg);
end;
procedure add_auton(p_ordr number, p_msg varchar2)
is
pragma autonomous_transaction;
begin
add(p_ordr=>p_ordr, p_msg=>p_msg);
commit;
exception
when others then
rollback;
raise;
end;
end proc_stp_pkg;
/1. Создал в APEX страницу с процессом перед проверками, вычислением, проверкой и процессом после вычисления. В каждом из них есть строки:
rollback; proc_str_pkg.add(..., '...'); proc_str_pkg.add_auton(..., '...');
2. Добавил кнопку и переход на эту же страницу при нажатии.
3. Запустил страницу и нажал на кнопку.
4. Выполнил запрос:
SQL> set pages 9999 line 200
SQL> column msg format a50
SQL> select * from processing_steps
2 order by ordr;
ORDR MSG
---------- --------------------------------------------------
1 Pr: On Submit - Before Computations and Validation
s - Autonomous Transaction
3 Computation - Autonomous Transaction
5 Validation - Autonomous Transaction
6 Pr: On Submit - After Computations and Validations
7 Pr: On Submit - After Computations and Validations
- Autonomous Transaction
SQL>Пропущенные вставки 0, 2 и 4 откатывались оператором ROLLBACK в последующих блоках обработки. Вставка 6 автоматически зафиксировалась при успешном выполнении последнего блока. Так что будьте осторожней, управляя фиксацией и откатом в Вашем коде - Вы можете повлиять на результаты предыдущих блоков.
Читать далее
понедельник, 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.
- Скачайте и сохраните asset_manager_1.0.zip с сайта http://www.oracle.com/technetwork/developer-tools/apex/application-express/packaged-apps-090453.html#ASSETS .
- Разархивируйте файл.
- В OSD подключитесь к схеме HR.
- ПКМ по пункту Application Express под HR в списке подключений, выберите Import Application (Импортировать приложение).
- Найдите и откройте разархивированную папку asset_manager_1.0, выберите файл asset_manager_installer_1.0.sql.
- Нажмите Next (Далее).
- Установите флажок Run Install Script (Запустить установочный скрипт) и нажмите Next.

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

Oracle SQL Developer настроен для удалённой отладки - Нажмите OK.
Шаг 3: Настройка Oracle APEX для отладки. Подготовьте Oracle APEX к отладке процедуры EBA_ASSET .update_status:
- Войдите в Oracle APEX как разработчик соответствующего рабочего пространства - того, в которое Вы установили приложение "Asset Manager".
- Нажмите Application Builder.
- Нажмите Asset Manager 1.0.
- Откройте страницу 11 - Inventory Details.
- В Процессах (Processes) нажмите Update Asset Status.
- В поле Source замените код на следующий:
- Нажмите Apply Changes (Применить изменения).
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 отключает отладочную сессию.
Шаг 4: Запуск приложения. Запустите приложение "Asset Manager" в Oracle APEX, вначале в обычном режиме, а затем - в режиме отладки.
- В Oracle APEX вернитесь назад, к странице 1 и нажмите Run (Запустить).
- Войдите в приложение как HR.
- Выберите Assets.
- Нажмите иконку редактирования для любой записи.
- Нажмите иконку редактирования для записи остатков. Поменяйте значение поля Status (статус).
- Нажмите Apply Changes. Приложение нормально обработает изменения, потому оно запущено не в режиме отладки.
- Нажмите иконку редактирования для той же записи остатков.
- Нажмите Debug (Отладка) на панели инструментов разработчика.
- Поменяйте статус и нажмите Apply Changes.
- Теперь OSD должен перехватить фокус ввода. (Если этого не произошло, то приложение будет показывать частично завершённый процесс загрузки страницы, и Вам нужно будет открыть окно OSD самостоятельно.)
- Используйте инструменты OSD, чтобы возобновить выполнение, выполнять отладку пошагово с обходом и со входом в процедуру. Во время отладки процедуры Вы можете видеть изменения значений в переменных и в данных.
![]() |
| Панель инструментов разработчика в Oracle APEX |
Когда процедура закончит выполнение, удалённый отладчик отсоединится.
Вы можете использовать удалённую отладку, чтобы пошагово пройти сквозь сложную 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.
Читать далее
Ярлыки:
article,
debug,
oracle apex,
oracle sql developer,
translation
пятница, 12 ноября 2010 г.
Oracle APEX: 4.0.2 на пороге
Если я всё верно понял.
Ждём-с!
UPD 2010-11-20: На MOS уже доступен для загрузки патч 10173973.
Читать далее
Ждём-с!
UPD 2010-11-20: На MOS уже доступен для загрузки патч 10173973.
Читать далее
Подписаться на:
Сообщения (Atom)



