<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-12214002</id><updated>2012-01-26T16:38:43.095-05:00</updated><category term='hocking valley'/><title type='text'>(YABAOAE) Yet Another Blog About Oracle Application Express</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default?start-index=101&amp;max-results=100'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>132</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12214002.post-6573765986306240849</id><published>2012-01-26T08:32:00.003-05:00</published><updated>2012-01-26T08:32:46.846-05:00</updated><title type='text'>Oracle Learning Library Mobile</title><content type='html'>The &lt;a href="http://www.oracle.com/oll"&gt;Oracle Learning Library&lt;/a&gt; team recently rolled out their new mobile application. &amp;nbsp;If you go to &lt;a href="http://www.oracle.com/oll"&gt;http://www.oracle.com/oll&lt;/a&gt;, you should see a mobile icon in the upper left. &amp;nbsp;Or you can simply bookmark &lt;a href="http://apex.oracle.com/pls/apex/f?p=60370:1"&gt;this link&lt;/a&gt; on your mobile device.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-EZVsgLUYEmo/TyFVnDqmJTI/AAAAAAAAC8k/gf4FWQoJTzY/s1600/oll_mobile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="307" src="http://3.bp.blogspot.com/-EZVsgLUYEmo/TyFVnDqmJTI/AAAAAAAAC8k/gf4FWQoJTzY/s320/oll_mobile.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;As I discussed in the past, the Oracle Learning Library isn't just about &lt;a href="http://apex.oracle.com/" target="_blank"&gt;Oracle Application Express&lt;/a&gt; or the Oracle Database. &amp;nbsp;There is content there for virtually every Oracle product offered - JD Edwards, NetBeans, Solaris, Java, Oracle Business Intelligence, Fusion Middleware, Oracle E-Business Suite, etc. &amp;nbsp;There are tutorials, white papers, Oracle By Examples, demonstrations, data sheets, and more.&lt;br /&gt;&lt;br /&gt;And at the risk of being criticized (&lt;a href="http://www.blogger.com/comment.g?blogID=12214002&amp;amp;postID=4209996089355219903" target="_blank"&gt;again&lt;/a&gt;), I can proudly proclaim that this is all running entirely on Oracle Application Express at &lt;a href="http://apex.oracle.com/"&gt;http://apex.oracle.com&lt;/a&gt; - the same hosted instance of Oracle Application Express that gets over 10 million page views a week and between 600 - 700 new workspace requests every week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-6573765986306240849?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/6573765986306240849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=6573765986306240849' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6573765986306240849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6573765986306240849'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2012/01/oracle-learning-library-mobile.html' title='Oracle Learning Library Mobile'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-EZVsgLUYEmo/TyFVnDqmJTI/AAAAAAAAC8k/gf4FWQoJTzY/s72-c/oll_mobile.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-4209996089355219903</id><published>2011-12-15T15:09:00.000-05:00</published><updated>2011-12-15T15:09:07.363-05:00</updated><title type='text'>Oracle Learning Library Advertisement Video</title><content type='html'>The Oracle Learning Library team just published a new advertisement video, promoting the &lt;a href="http://www.oracle.com/goto/oll"&gt;Oracle Learning Library&lt;/a&gt;. &amp;nbsp;OLL is a great, free source for a lot of technical content on virtually every Oracle product. &amp;nbsp;Just be sure you turn your volume down before playing this video - the music is quite loud.&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/GcfECGXseY4" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You may ask why I'm promoting this on an APEX blog. &amp;nbsp;Well, it's because:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The Oracle Learning Library application itself is written in Oracle Application Express.&lt;/li&gt;&lt;li&gt;There is a wealth of Oracle Application Express content available in the OLL.&lt;/li&gt;&lt;li&gt;It's yet one more application that runs successfully on &lt;a href="http://apex.oracle.com/"&gt;apex.oracle.com&lt;/a&gt;. &amp;nbsp;This application alone accounts for over 2M page views/events per week on apex.oracle.com&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-4209996089355219903?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/4209996089355219903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=4209996089355219903' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4209996089355219903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4209996089355219903'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/12/oracle-learning-library-advertisement.html' title='Oracle Learning Library Advertisement Video'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/GcfECGXseY4/default.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-975168575194086179</id><published>2011-12-14T23:39:00.001-05:00</published><updated>2011-12-14T23:41:19.170-05:00</updated><title type='text'>High CPU Usage and APEX (again)</title><content type='html'>A couple months ago, I &lt;a href="http://joelkallman.blogspot.com/2011/10/high-cpu-waits-and-sql-from-oracle-apex.html"&gt;wrote about a customer&lt;/a&gt; who was experiencing High CPU Waits presumably from &lt;a href="http://apex.oracle.com/"&gt;Oracle Application Express&lt;/a&gt;. &amp;nbsp;Well, earlier this week I was at another customer site with exactly the same problem.&lt;br /&gt;&lt;br /&gt;This was a case of "the business users" using Oracle Application Express to build an application. &amp;nbsp;The application was built in short order and well received by the end users. &amp;nbsp;The application became popular, they expanded the application and grew the user base, and after moving it to a different and faster environment, they hit a wall. &amp;nbsp;The DBA's performed some analysis on the application, and based upon the &lt;a href="http://docs.oracle.com/cd/E11882_01/server.112/e10822/tdppt_transient.htm#TDPPT065"&gt;Active Session History&lt;/a&gt; reports, they concluded that the statements using the most CPU were all from Application Express and of the form:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;declare&lt;br /&gt;   rc__ number; &lt;br /&gt;   simple_list__ owa_util.vc_arr; &lt;br /&gt;    complex_list__ owa_util.vc_arr; &lt;br /&gt;begin&lt;br /&gt;owa.init_cgi_env(:n__, :nm__, :v__); &lt;br /&gt;htp.HTBUF_LEN := 63; &lt;br /&gt;null;  null; &lt;br /&gt;simple_list__(1) := 'sys.%'; &lt;br /&gt;simple_list__(2) := 'dbms\_%'; &lt;br /&gt;simple_list__(3) := 'utl\_%'; &lt;br /&gt;simple_list__(4) := 'owa\_%'; &lt;br /&gt;simple_list__(5) := 'owa.%'; &lt;br /&gt;simple_list__(6) := 'htp.%'; &lt;br /&gt;simple_list__(7) := 'htf.%'; &lt;br /&gt;simple_list__(8) := 'wpg_docload.%'; &lt;br /&gt;simple_list__(9) := 'ctxsys.%'; &lt;br /&gt;simple_list__(10) := 'mdsys.%'; &lt;br /&gt;if ((owa_match.match_pattern(p_string =&amp;gt; 'f' /* */, p_simple_pattern =&amp;gt; simple_list__ , p_complex_pattern =&amp;gt; complex_list__ , p_use_special_chars =&amp;gt; false))) then&lt;br /&gt;    rc__ := 2; &lt;br /&gt;else&lt;br /&gt;    null; null; f(p=&amp;gt;:p); &lt;br /&gt;if (wpg_docload.is_file_download) then&lt;br /&gt;   rc__ := 1; &lt;br /&gt;   wpg_docload.get_download_file(:doc_info); &lt;br /&gt;   null;  null;   null; &lt;br /&gt;   commit; &lt;br /&gt;else&lt;br /&gt;  rc__ := 0;  null;      null;   null;  commit; &lt;br /&gt;   owa.get_page(:data__, :ndata__); &lt;br /&gt;end if; &lt;br /&gt;end if; &lt;br /&gt;:rc__ := rc__; &lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The problem was, as I tried to explain to the DBA's, this PL/SQL block merely reflected the execution of a page view in Application Express. The ASH report will aggregate the "top" sections by top-level call, but the problem really lies&amp;nbsp;&lt;b&gt;within&lt;/b&gt; these calls, with what the application developers coded in their application. &amp;nbsp;For all practical purposes, the overhead of the APEX engine is fixed, and anything else beyond that is what is coded inside of the application by the application developer. &amp;nbsp;The DBA's asked a very reasonable question, namely "what do we do next?"&lt;br /&gt;&lt;br /&gt;We started the process by analyzing the activity log of Oracle Application Express for the particular time window, to identify what was consuming the vast majority of time. &amp;nbsp;And we were able to produce a nice listing of applications and pages, sorted by average execution time (really no differently than what I &lt;a href="http://joelkallman.blogspot.com/2011/10/high-cpu-waits-and-sql-from-oracle-apex.html"&gt;posted earlier&lt;/a&gt;). &amp;nbsp;But once we did this, the DBA's wanted to be able to drill down into what was executing on those pages so they could analyze it and tune it. &amp;nbsp;Given that the vast majority of this customer's primary application used SQL Reports and Interactive Reports, we joined the activity log with the APEX view which contained the SQL statements for the reporting regions on those pages (APEX_APPLICATION_PAGE_REGIONS). &amp;nbsp;We ended up with the following query:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;select sum(elapsed_time), count(*), &lt;br /&gt;       to_char(avg(elapsed_time),'9999.99') avg_elap, &lt;br /&gt;       a.application_id||':'||a.page_id app_and_page,&lt;br /&gt;       dbms_lob.substr(b.region_source,2000,1)&lt;br /&gt;  from apex_workspace_activity_log a&lt;br /&gt;  join apex_application_page_regions b &lt;br /&gt;    on a.application_id = b.application_id and a.page_id = b.page_id&lt;br /&gt; where a.view_date between to_date('201112142100','RRRRMMDDHH24MI') &lt;br /&gt;                       and to_date('201112142105','RRRRMMDDHH24MI')&lt;br /&gt;   and a.page_id is not null&lt;br /&gt;   and b.source_type like '%Report%'&lt;br /&gt; group by a.application_id||':'||a.page_id, dbms_lob.substr(b.region_source,2000,1)&lt;br /&gt;having count(*) &amp;gt; 10&lt;br /&gt; order by 3 desc&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This query can also be issued directly from SQL*Plus by the DBA's. &amp;nbsp;If they connect as SYS or as a user who has been granted the database role APEX_ADMINISTRATOR_ROLE, in Application Express 4.1, they will be able to query across all workspaces and APEX applications on the instance.&lt;br /&gt;&lt;br /&gt;Understand that there are many places in an application which could be causing performance issues. &amp;nbsp;There could be slow queries in an authorization scheme that is used in multiple places on a page. &amp;nbsp;There could be processes or validations or elements on page 0 or a slow page sentry or a host of other things that could be causing degraded performance and which would become apparent when debugging a page. &amp;nbsp;But to identify the report queries on pages and associate those with the activity log and slowest performing pages, the above query is a great place to start.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-975168575194086179?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/975168575194086179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=975168575194086179' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/975168575194086179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/975168575194086179'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/12/high-cpu-usage-and-apex-again.html' title='High CPU Usage and APEX (again)'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-6234833763087520215</id><published>2011-11-21T13:41:00.003-05:00</published><updated>2011-11-21T13:53:39.493-05:00</updated><title type='text'>Oracle Application Express / Oracle Access Manager Integration White Paper now available</title><content type='html'>&lt;a href="http://dpeake.blogspot.com/"&gt;David Peake&lt;/a&gt;, the product manager of Oracle Application Express, recently published on the &lt;a href="http://otn.oracle.com/apex"&gt;APEX OTN site&lt;/a&gt; a white paper describing how to integrate Oracle Application Express 4.1 with Oracle Access Manager 11g.  If you go to the &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/learnmore/index.html"&gt;Learn More&lt;/a&gt; section on the Application Express site on OTN, look for it in the bottom section entitled "Technical Information and White Papers".  It's the one with the (obvious) title of &lt;i&gt;&lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/learnmore/apex-oam-integration-1375333.pdf"&gt;Integrating Oracle Application Express with Oracle Access Manager&lt;/a&gt;&lt;/i&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Many thanks to &lt;a href="http://chrisonoracle.wordpress.com/"&gt;Christian Neumueller&lt;/a&gt; from the Application Express team and Ramana Turlapati from the Access Manager team for all their efforts in this integration and white paper.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-6234833763087520215?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/6234833763087520215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=6234833763087520215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6234833763087520215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6234833763087520215'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/11/oracle-application-express-oracle.html' title='Oracle Application Express / Oracle Access Manager Integration White Paper now available'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-6053523005439633505</id><published>2011-11-08T07:36:00.004-05:00</published><updated>2011-11-08T07:48:20.589-05:00</updated><title type='text'>Adjusting the Width of an Interactive Report Filter Textbox</title><content type='html'>I learn something new every day.&lt;br /&gt;&lt;br /&gt;Today, Oracle Support sent the following customer question my way:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;"We have columns with long data value but the filter (while running a Interactive report) in action menu is of fixed width and hence difficult for us to view the complete data.  Is there a possibility for increasing the size of the filter dialog ? (which contains Columns, Operator and Expressions)."&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When I asked for clarification, I received the following picture:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-zV_6fLDMx-Y/TrkjTYTiJRI/AAAAAAAAC8E/6V295YUt7Z4/s1600/expressionfilter.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 122px;" src="http://3.bp.blogspot.com/-zV_6fLDMx-Y/TrkjTYTiJRI/AAAAAAAAC8E/6V295YUt7Z4/s320/expressionfilter.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5672604021498717458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'll never claim to know it all.  But I will claim to know the people who collectively &lt;b&gt;do&lt;/b&gt; know it all.  &lt;a href="http://apex.shak.us/"&gt;Shakeeb Rahman&lt;/a&gt; from the Application Express development team replied with a simple solution.  As Shakeeb stated:  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;"We can target the expression field and its drop down menu using the IDs that are assigned to these items.  Here is the style that you would put into your page header to give these two items a fixed width:"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre class="brush:xml;toolbar:false;"&gt;&amp;lt;style&amp;gt;&lt;br /&gt;#apexir_EXPR, #apexir_col_values_drop { width: 300px; }&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And that's all there is to it.  If you want to adjust the width of the expression field and the associated drop down menu, simply add this inline style to the page header attribute on the page where your Interactive Report is defined.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-6053523005439633505?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/6053523005439633505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=6053523005439633505' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6053523005439633505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6053523005439633505'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/11/adjusting-width-of-interactive-report.html' title='Adjusting the Width of an Interactive Report Filter Textbox'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-zV_6fLDMx-Y/TrkjTYTiJRI/AAAAAAAAC8E/6V295YUt7Z4/s72-c/expressionfilter.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-8763559848929335334</id><published>2011-10-26T20:40:00.017-04:00</published><updated>2011-10-27T09:52:54.278-04:00</updated><title type='text'>High CPU Waits and SQL from Oracle APEX</title><content type='html'>I was recently at a customer site helping one of the DBAs diagnose a performance issue on their rather large &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt; instance (over 800 production applications on the one instance).  This gentleman self-admittedly didn't know all that much about APEX but he was adept at producing and analyzing ASH (&lt;a href="http://download.oracle.com/docs/cd/E11882_01/server.112/e10822/tdppt_transient.htm#TDPPT065"&gt;Active Session History&lt;/a&gt;) and AWR (&lt;a href="http://download.oracle.com/docs/cd/E11882_01/server.112/e16638/autostat.htm#PFGRF02601"&gt;Active Workload Repository&lt;/a&gt;) reports.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;He showed me the extraordinarily high CPU times between 0900 and 1100 his time, and he traced it to the following PL/SQL block that "comes from APEX":&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;declare &lt;br /&gt;   rc__ number; &lt;br /&gt;   simple_list__ owa_util.vc_arr; &lt;br /&gt;    complex_list__ owa_util.vc_arr; &lt;br /&gt;begin &lt;br /&gt;owa.init_cgi_env(:n__, :nm__, :v__); &lt;br /&gt;htp.HTBUF_LEN := 63; &lt;br /&gt;null;  null; &lt;br /&gt;simple_list__(1) := 'sys.%'; &lt;br /&gt;simple_list__(2) := 'dbms\_%'; &lt;br /&gt;simple_list__(3) := 'utl\_%'; &lt;br /&gt;simple_list__(4) := 'owa\_%'; &lt;br /&gt;simple_list__(5) := 'owa.%'; &lt;br /&gt;simple_list__(6) := 'htp.%'; &lt;br /&gt;simple_list__(7) := 'htf.%'; &lt;br /&gt;simple_list__(8) := 'wpg_docload.%'; &lt;br /&gt;simple_list__(9) := 'ctxsys.%'; &lt;br /&gt;simple_list__(10) := 'mdsys.%'; &lt;br /&gt;if ((owa_match.match_pattern(p_string =&gt; 'f' /* */, p_simple_pattern =&gt; simple_list__ , p_complex_pattern =&gt; complex_list__ , p_use_special_chars =&gt; false))) then &lt;br /&gt;    rc__ := 2; &lt;br /&gt;else &lt;br /&gt;    null; null; f(p=&gt;:p); &lt;br /&gt;if (wpg_docload.is_file_download) then &lt;br /&gt;   rc__ := 1; &lt;br /&gt;   wpg_docload.get_download_file(:doc_info); &lt;br /&gt;   null;  null;   null; &lt;br /&gt;   commit; &lt;br /&gt;else &lt;br /&gt;  rc__ := 0;  null;      null;   null;  commit; &lt;br /&gt;   owa.get_page(:data__, :ndata__); &lt;br /&gt;end if; &lt;br /&gt;end if; &lt;br /&gt;:rc__ := rc__; &lt;br /&gt;end;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've worked with Oracle Support on issues exactly like this from other customers too, so it seems to be a common problem "with APEX".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As I explained to this customer:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;The engine of Oracle Application Express is written in SQL and PL/SQL.&lt;/li&gt;&lt;li&gt;When someone performs a page request from their browser to the Application Express engine, they are ultimately calling a PL/SQL procedure which is the entry point into APEX.&lt;/li&gt;&lt;li&gt;Oracle Application Express is front-ended by a Web server which has some facility to map requests in the URL to execution of the APEX engine - this is usually either Apache &amp;amp; mod_plsql or the APEX Listener or the XDB HTTP Protocol Server &amp;amp; embedded PL/SQL Gateway.&lt;/li&gt;&lt;li&gt;This "agent" on the Web server prepares an anonymous PL/SQL block for each and every request into the APEX engine.  The PL/SQL he was showing me was exactly this anonymous PL/SQL block.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To state this succinctly and in more lucid terms, the PL/SQL block he was showing me wasn't anything out of the ordinary.  I saw an anonymous PL/SQL block which was ultimately calling the APEX engine (via the code in the block:  &lt;i&gt;f(p=&amp;gt;:p);&lt;/i&gt; ).  And since he showed me that this specific PL/SQL block executed about 800K times in an hour, I said that this directly correlated to the number of page events on his system, e.g., the number of times a page was rendered or posted or report paginated.  He needed to drill down into the APEX instance and see what was consuming the vasty majority of execution time within APEX.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While there are nice instance administration reports in APEX to convey this type of information, this DBA didn't have instance administration access - poor guy.  So we did some very basic queries against the APEX views to return the necessary information.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the most relevant views for him was APEX_WORKSPACE_ACTIVITY_LOG.  Connecting as SYS (or in APEX 4.1 or later, connecting as SYS or a database user granted the APEX_ADMINISTRATOR_ROLE database role), we are able to see all information across all applications and workspaces.  So we came up with a very easy query to pinpoint the slowest pages on the system during his time window:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;select workspace, application_name, application_id, page_id, count(*) total_page_events, avg(elapsed_time) avg_elapsed_time, sum(elapsed_time) elapsed_time&lt;br /&gt;  from apex_workspace_activity_log&lt;br /&gt; where view_date between to_date('201110260900','RRRRMMDDHH24MISS') and to_date('201110261100','RRRRMMDDHH24MISS')&lt;br /&gt; group by workspace, application_name, application_id, page_id&lt;br /&gt; order by 6, 7 asc&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thus, using this query, I was then able to tell him which application and page was consuming, on average, the most time on his system.  Then, using this information along with other APEX views, we were able to identify the workspace names, applications, pages, report queries and eventually the administrators of these workspaces and applications so they could begin their own analysis and tuning exercise.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-8763559848929335334?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/8763559848929335334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=8763559848929335334' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8763559848929335334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8763559848929335334'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/10/high-cpu-waits-and-sql-from-oracle-apex.html' title='High CPU Waits and SQL from Oracle APEX'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-9141487138734683887</id><published>2011-08-28T22:08:00.007-04:00</published><updated>2011-08-28T22:35:33.752-04:00</updated><title type='text'>Who uses apex.oracle.com (as of August 28, 2011)?</title><content type='html'>I was recently browsing a &lt;a href="http://www.apexninjas.com/blog/f?p=100:1:0::::P1_ARTICLE:2320"&gt;blog post over at ApexNinjas.com&lt;/a&gt;, where they showed the breakdown of visitors by country to their site, and found that most developers visiting their site came from the U.S. and Germany and asked the "guys who manage apex.oracle.com" if they could confirm this.  From time to time, I like to post the Google Analytics report for apex.oracle.com, so people can see where users are coming from.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note that I only capture the Google Analytics information from the &lt;a href="http://apex.oracle.com/pls/apex/f?p=4550:1"&gt;apex.oracle.com login page&lt;/a&gt; and nowhere else.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is the map overlay and table by country of visitors to the login page.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a title="View apex.oracle.com - Google Analytics - 20110828 on Scribd" href="http://www.scribd.com/doc/63461026/Apex-oracle-com-Google-Analytics-20110828" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;apex.oracle.com - Google Analytics - 20110828&lt;/a&gt;&lt;iframe class="scribd_iframe_embed" src="http://www.scribd.com/embeds/63461026/content?start_page=1&amp;view_mode=list&amp;access_key=key-k44233l7pgknsqogsuv" data-auto-height="true" data-aspect-ratio="0.772727272727273" scrolling="no" id="doc_68089" width="100%" height="600" frameborder="0"&gt;&lt;/iframe&gt;&lt;script type="text/javascript"&gt;(function() { var scribd = document.createElement("script"); scribd.type = "text/javascript"; scribd.async = true; scribd.src = "http://www.scribd.com/javascripts/embed_code/inject.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(scribd, s); })();&lt;/script&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My interpretation of this report:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;This report should not be used to determine the primary geographies of Application Express &lt;b&gt;developers&lt;/b&gt;.  There are countless developers who happily use APEX yet never visit the login page of apex.oracle.com.&lt;/li&gt;&lt;li&gt;The U.S. consistently has more visits than any other country.&lt;/li&gt;&lt;li&gt;Since I did this &lt;a href="http://joelkallman.blogspot.com/2008/02/who-uses-apexoraclecom.html"&gt;same exercise in 2008&lt;/a&gt;, there has been a significant increase from India.&lt;/li&gt;&lt;li&gt;Canada has also climbed into the top 5.&lt;/li&gt;&lt;li&gt;Poland and Brazil have vaulted into the top 10.  Three years ago, Brazil was 23rd, now they are 7th.  Impressive.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-9141487138734683887?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/9141487138734683887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=9141487138734683887' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/9141487138734683887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/9141487138734683887'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/08/who-uses-apexoraclecom-as-of-august-28.html' title='Who uses apex.oracle.com (as of August 28, 2011)?'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-3814189784407419941</id><published>2011-08-26T09:42:00.005-04:00</published><updated>2011-08-26T09:56:26.679-04:00</updated><title type='text'>Where did the online help go in APEX 4.1?</title><content type='html'>This morning, I responded to an inquiry from Oracle Support (on behalf of a customer) about the lack of "online help" in Application Express 4.1.  There is also a &lt;a href="https://forums.oracle.com/forums/thread.jspa?threadID=2273993"&gt;current thread&lt;/a&gt; on the Oracle Technology Network discussion forum that is asking the question "where did the help go?"&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is not an oversight.  This was intentional by design and for the following reasons:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;This gives our documentation team greater flexibility in correcting documentation and online help issues.  &lt;a href="http://joelkallman.blogspot.com/2011/08/error-in-installation-guide-for-oracle.html"&gt;Here&lt;/a&gt; is a great example of why this is beneficial to us &lt;b&gt;and&lt;/b&gt; our customers.&lt;/li&gt;&lt;li&gt;Many customers would never use the online help and use Google Search instead.&lt;/li&gt;&lt;li&gt;The &lt;a href="http://download.oracle.com/docs/cd/E23903_01/doc/doc.41/e21674/toc.htm"&gt;online documentation&lt;/a&gt; is searchable.&lt;/li&gt;&lt;li&gt;This dramatically reduces the overall distribution size of APEX 4.1 as well as the size of the content loaded into the XDB repository (if you're using the embedded PL/SQL gateway).&lt;/li&gt;&lt;li&gt;This removes the complexity associated with indexing the online help files, especially if your instance is accessed over SSL and/or the database is behind a firewall that cannot get to the Web server.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;And what about a customer who cannot get to the Internet, if they are disconnected or at a facility (like a military customer or government intelligence) where access to the Internet is blocked?  Well, this customer can download the entire documentation, stage it somewhere, and then &lt;a href="http://download.oracle.com/docs/cd/E23903_01/doc/doc.41/e21678/adm_mg_service_set.htm#BABGEAGJ"&gt;adjust the URL&lt;/a&gt; that is used when clicking the 'Help' link from within Oracle Application Express.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So....is this "improvement on the wrong side" as one customer suggests?  I personally don't think so.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-3814189784407419941?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/3814189784407419941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=3814189784407419941' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3814189784407419941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3814189784407419941'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/08/where-did-online-help-go-in-apex-41.html' title='Where did the online help go in APEX 4.1?'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-6011138176067608242</id><published>2011-08-25T08:38:00.005-04:00</published><updated>2011-08-26T10:18:49.945-04:00</updated><title type='text'>Error in Installation Guide for Oracle Application Express 4.1</title><content type='html'>&lt;div&gt;The new release of &lt;a href="http://apex.oracle.com/"&gt;Oracle Application Express 4.1&lt;/a&gt; will be installed into a new schema in your database.  The name of this schema is 'APEX_040100'.  Unfortunately, the &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/documentation/index.html"&gt;Installation Guide&lt;/a&gt; for Oracle Application Express 4.1 references a schema name of 'APEX_041000'.  This is incorrect.  For any example code (e.g., creation of Network ACL) which references APEX_041000, simply replace it first with APEX_040100.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hopefully this error is short-lived, as I have reported this error to our documentation team and requested that they correct this in the hosted documentation.  If you're reading this blog post a month from now and you don't see any reference to the incorrect APEX_041000, then the problem has been resolved.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Thanks to &lt;a href="http://dgielis.blogspot.com/"&gt;Dimitri Gielis&lt;/a&gt; of &lt;a href="http://www.apex-evangelists.com/"&gt;APEX Evangelists&lt;/a&gt; for finding and reporting this error.&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#ff0000;"&gt;Important Update&lt;/span&gt;:  As of August 26, 2011, this problem is now resolved.  This is the beauty and flexibility of online help and documentation.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-6011138176067608242?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/6011138176067608242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=6011138176067608242' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6011138176067608242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6011138176067608242'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/08/error-in-installation-guide-for-oracle.html' title='Error in Installation Guide for Oracle Application Express 4.1'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-648412595651696993</id><published>2011-08-24T11:49:00.009-04:00</published><updated>2011-08-24T15:08:03.706-04:00</updated><title type='text'>Oracle Application Express 4.1 released</title><content type='html'>Oracle Application Express 4.1 was officially released today and is &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html"&gt;available for download&lt;/a&gt; from the Oracle Technology Network.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/application-express/apex-41-new-features-459652.html"&gt;many new features in Oracle Application Express 4.1&lt;/a&gt;, including&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Data Upload&lt;/i&gt; - add functionality to your application so your end users can upload CSV data (similar to what you can use in Application Express SQL Workshop)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Error Handling&lt;/i&gt; - Dramatically improved error handling, where you can define how exceptions are handled in your application instead of being constrained by the APEX engine itself.  Patrick discussed this in detail &lt;a href="http://www.inside-oracle-apex.com/apex-4-1-error-handling-improvements-part-1/"&gt;here&lt;/a&gt; and &lt;a href="http://www.inside-oracle-apex.com/apex-4-1-error-handling-improvements-part-2/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;ROWID&lt;/i&gt; - Instead of being constrained by one or two element primary keys, you can simply use ROWID as the unique identifier for Automatic DML forms and tabular forms.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Websheets&lt;/i&gt; - Websheets have undergone a complete overhaul of the user interface, as well as some interesting new features, like the ability to create reports on SQL queries against DataGrid data.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Tabular Forms&lt;/i&gt; - Many new features with tabular forms, including tabular forms processes and tabular form validations.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Plug-Ins&lt;/i&gt; - Support for Authentication and Authorization plug-ins&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Calendars&lt;/i&gt; - Enable editing of data directly from links in a calendar, and also support drag-and-drop to move rows from one day/time to another.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Dynamic Actions&lt;/i&gt; - Support added for dynamic actions against buttons, and other enhancements.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Accessibility&lt;/i&gt; - Numerous accessibility improvements have been made in the templates and HTML produced by Application Express.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Translations&lt;/i&gt; - Complete overhaul of the user interface, previously discussed &lt;a href="http://joelkallman.blogspot.com/2011/06/translations-in-application-express-41.html"&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One obvious question is going to be "where is mobile support?"  When &lt;a href="http://jquerymobile.com/"&gt;jQuery Mobile&lt;/a&gt; becomes production software, we will include it in the very next patch set of Oracle Application Express.  The infrastructure is there in APEX 4.1 to support it.  And &lt;a href="http://marcsewtz.blogspot.com/"&gt;Marc Sewtz&lt;/a&gt; has promised to blog about how you can drop in the jQuery Mobile Beta into an APEX 4.1 installation.  The jQuery Mobile Beta portion can't be supported by Oracle Support, obviously.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Our many thanks to the countless people who participated in the Application Express 4.1 Early Adopter program and provided feedback, suggestions and bug reports.  We also owe a special thanks to the many Oracle employees who run their mission critical applications on apex.oraclecorp.com (an internal instance of Application Express, but for production applications, used by virtually every business unit in the company).  They reported many issues and endured some outages while we rectified flaws in the upgrade process and Application Express engine itself.  It is thanks to their patience and problem reporting that we were able to avoid embarrassing and reputation-breaking occasions for our customers.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-648412595651696993?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/648412595651696993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=648412595651696993' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/648412595651696993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/648412595651696993'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/08/oracle-application-express-41-released.html' title='Oracle Application Express 4.1 released'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-7449955857023148052</id><published>2011-08-11T20:57:00.005-04:00</published><updated>2011-08-11T21:39:45.224-04:00</updated><title type='text'>UK Ministry of Justice, Zippy Zebra and Oracle Application Express</title><content type='html'>An Oracle partner, &lt;a href="http://www.zippyzebra.co.uk"&gt;Zippy Zebra&lt;/a&gt;, has recently published a case study of one of their most recent engagements.  The system is for the &lt;a href="http://www.justice.gov.uk/about/moj/index.htm"&gt;Ministry of Justice&lt;/a&gt; in the United Kingdom.  Zippy Zebra was commissioned by Capita and HP on this program, and their efforts were part of a modernization program for a system called OASys, which is the abbreviated term for the Offender Assessment System.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I received a personal demonstration of the Web interface of OASsys (written in Oracle Application Express) from Jonathan Rhind of Zippy Zebra.  I was impressed not only with their expert knowledge of &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt;, but also their competence in Web technologies and user interface design.  Most Web applications are "okay"; this system was beautiful.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can read the full details in the &lt;a href="http://www.zippyzebra.co.uk/moj.html"&gt;case study on the Zippy Zebra site&lt;/a&gt;.  Please note that the system is targeted to support a user population of 30,000, all running on &lt;a href="http://www.oracle.com/us/products/database/options/real-application-clusters/index.html"&gt;Oracle Real Application Clusters (Oracle RAC), with Oracle Database 11g Enterprise Edition&lt;/a&gt;.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And who said APEX is only good for Access or Excel replacement?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-7449955857023148052?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/7449955857023148052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=7449955857023148052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7449955857023148052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7449955857023148052'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/08/uk-ministry-of-justice-zippy-zebra-and.html' title='UK Ministry of Justice, Zippy Zebra and Oracle Application Express'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-653003900614450653</id><published>2011-08-11T10:16:00.002-04:00</published><updated>2011-08-11T10:24:14.220-04:00</updated><title type='text'>tryapexnow.com for APEX 4.1 Early Adopter going away</title><content type='html'>This may be a late blog posting, but for those who haven't noticed, on the login page of &lt;a href="http://tryapexnow.com"&gt;http://tryapexnow.com&lt;/a&gt; there is the following message:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;"This instance will be turned off on 12-AUG-2011."&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After this Friday, August 12, 2011, we will be extinguishing the tryapexnow.com database instance and server.  It has served its purpose.  If you want anything from there, please go grab it now.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thanks to the 1,411 customers who signed up to kick the tires of Application Express 4.1 Early Adopter.  Your time spent is appreciated and your feedback has been invaluable.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-653003900614450653?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/653003900614450653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=653003900614450653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/653003900614450653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/653003900614450653'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/08/tryapexnowcom-for-apex-41-early-adopter.html' title='tryapexnow.com for APEX 4.1 Early Adopter going away'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5043675116858452955</id><published>2011-08-03T22:02:00.010-04:00</published><updated>2011-08-03T22:34:43.566-04:00</updated><title type='text'>Need Your Support</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/-hhRe9DKQx38/TjoD_FzQfJI/AAAAAAAACpE/7pNqRHGLY0Y/s1600/0719_Pelotonia2011.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 126px;" src="http://1.bp.blogspot.com/-hhRe9DKQx38/TjoD_FzQfJI/AAAAAAAACpE/7pNqRHGLY0Y/s320/0719_Pelotonia2011.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5636822266031406226" /&gt;&lt;/a&gt;Firstly, this post has &lt;b&gt;nothing&lt;/b&gt; to do with Oracle nor Oracle Application Express.  So you can stop reading now, if you wish.  Also, this is a shameless request for financial donations.  So, again, you can stop reading now.  As our friend &lt;a href="http://blogs.oracle.com/carlback/entry/robot_dance"&gt;Carl Backstrom said&lt;/a&gt; so many years ago, "Hey it's my blog I can post what I want ! :)"&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In a few weeks, I will be participating in a bike tour with the sole purpose of raising money for cancer research.  Last year, I rode with a group of guys for 43 miles.  This year, I am doing the full 180 mile (289.6 km) tour over two days.  I get nothing out of this endeavor other than tired legs and sore arms.  My goals are to to raise awareness of this dreadful disease and help solicit donations which will help fund cancer research.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The tour is called &lt;a href="http://www.pelotonia.org/"&gt;Pelotonia&lt;/a&gt;.  100% of every donation will fund essential research at The Ohio State University Comprehensive Cancer Center - James Cancer Hospital and Solove Research Institute.  I am simply asking you to help me reach my fundraising goal.  Large or small, every donation makes a difference.  Even a $5 donation is relevant - every contribution is important.  In 2010, over 4,000 riders and volunteers participated to raise $7,846,705 for cancer research. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My ride this year has extra meaning for me.  I am dedicating my 180 mile ride in honor of my father, Robert R. Kallman, a prostate cancer survivor, who passed away on July 22, 2011.  He handled his disease and old age with both grace and zeal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you're interested, my Pelotonia profile is at:  &lt;a href="http://www.mypelotonia.org/riders_profile.jsp?MemberID=64498"&gt;http://www.mypelotonia.org/riders_profile.jsp?MemberID=64498&lt;/a&gt;.  Look for the "Donate To My Ride" link in red.  And I know that you can be on the opposite side of the planet and still make a donation, as my good friend &lt;a href="https://www.packtpub.com/authors/profiles/arie-geller"&gt;Arie Geller&lt;/a&gt; from Israel has already proven.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am grateful for your support in this cause, no matter how large or small.  Thank you.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5043675116858452955?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5043675116858452955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5043675116858452955' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5043675116858452955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5043675116858452955'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/08/need-your-support.html' title='Need Your Support'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-hhRe9DKQx38/TjoD_FzQfJI/AAAAAAAACpE/7pNqRHGLY0Y/s72-c/0719_Pelotonia2011.gif' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5339662290396940289</id><published>2011-07-06T16:08:00.004-04:00</published><updated>2011-07-06T16:22:20.789-04:00</updated><title type='text'>Oracle APEX on Facebook</title><content type='html'>Today, an email was sent out to everyone who subscribes to the &lt;a href="http://www.oracle.com/subscribe/index.html"&gt;Oracle Database Insider&lt;/a&gt; newsletter.  In this email were 3 links:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://www.facebook.com/pages/Oracle-Application-Express-APEX/133474186735342"&gt;Oracle APEX on Facebook&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://www.facebook.com/pages/Oracle-SQL-Developer/222195214487186"&gt;Oracle SQL Developer on Facebook&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitter.com/#%21/OracleSQLDev"&gt;Oracle SQL Developer Twitter&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This announcement isn't going to move mountains, but the important thing to note is that &lt;a href="https://www.facebook.com/pages/Oracle-Application-Express-APEX/133474186735342"&gt;Oracle APEX on Facebook&lt;/a&gt; is created and run by Oracle Product Marketing.  For all those people who ask "where's the marketing for APEX from Oracle?", here's just the start of it.  And with more to come.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5339662290396940289?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5339662290396940289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5339662290396940289' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5339662290396940289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5339662290396940289'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/07/apex-on-facebook.html' title='Oracle APEX on Facebook'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-1833295658799464217</id><published>2011-07-04T19:48:00.014-04:00</published><updated>2011-07-04T20:37:12.296-04:00</updated><title type='text'>You shouldn't use Oracle Application Express because...</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/-JL6EHH_EJlc/ThJchJk0DxI/AAAAAAAAB4s/TCatK8tVPMw/s1600/dewey.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:center; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 252px;" src="http://1.bp.blogspot.com/-JL6EHH_EJlc/ThJchJk0DxI/AAAAAAAAB4s/TCatK8tVPMw/s320/dewey.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5625660609114935058" /&gt;&lt;/a&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;I always revel at the myriad of untruths and misinformation given about Oracle Application Express and the reasons why you shouldn't use it.  Some of the most common and my favorites are:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;It can't scale.  Most people know this is my favorite to &lt;a href="http://joelkallman.blogspot.com/2009/06/who-says-application-express-cant-scale.html"&gt;refute&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It's only suitable for Access and Excel replacement.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;With the Sun acquisition, it's going to be all Java all the time.  And APEX is not Java.  (An Oracle partner told me this, not aware that I work for Oracle).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It's written in SQL and PL/SQL.  It can't really be all that extensible.  It's in SQL, after all.  (This gem came to me from Oracle's own Siebel CRM team).&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, I have a new one to add to the list.  At the recent &lt;a href="http://joomla.kscope11.com/"&gt;ODTUG Kscope&lt;/a&gt; conference in Long Beach, CA, I met with two partners who have been building an elegant application for use by the United Nations (yes, &lt;b&gt;those&lt;/b&gt; United Nations).  In their presentation, one of the attendees raised the issue of Oracle's commitment to APEX.  He raised the point of how most Oracle products are labeled as 11 release whereas APEX has its own release numbers.  For him this must be a sure sign of long term non-commitment and preference to ADF.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let me state a few things:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;The difference in APEX version number has zero (as in nil) bearing on any direct or indirect commitment by Oracle for APEX&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;We have a major revision of Oracle Application Express at least once a year.  The database does not release that frequently.  It's beneficial to &lt;b&gt;not&lt;/b&gt; have the same version number, otherwise, we'd have to sit and cool our heels between 11gR1 and 11gR2, or 11gR2 and Database 12.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The Oracle Database ships with Oracle Application Express, and has done so since Database 10gR1 - all the way through 10gR2, 11gR1, 11gR2 and Database 12.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;With respect to the forthcoming Database Express Edition (XE), to reduce the size of the download and size of on-disk distribution, the early decision was to not include Oracle Application Express.  But the Senior VP of Server Technologies responsible for all of Oracle Database asked for APEX to be put back in and included with XE.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oracle Application Express was first started in 1999.  Oracle HTML DB and Oracle Application Express have been in constant development since the first supported production release in 2004.  The versions and year of release are:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;HTML DB 1.5&lt;/td&gt;&lt;td&gt;2004&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;HTML DB 1.6&lt;/td&gt;&lt;td&gt;2005&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;HTML DB 2.0&lt;/td&gt;&lt;td&gt;2005&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Application Express 2.1&lt;/td&gt;&lt;td&gt;2006&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Application Express 2.2&lt;/td&gt;&lt;td&gt;2006&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Application Express 3.0&lt;/td&gt;&lt;td&gt;2007&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Application Express 3.1&lt;/td&gt;&lt;td&gt;2008&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Application Express 3.2&lt;/td&gt;&lt;td&gt;2009&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Application Express 4.0&lt;/td&gt;&lt;td&gt;2010&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Application Express 4.1&lt;/td&gt;&lt;td&gt;2011*&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think there's only one thing to safely conclude about this person who doubted Oracle's commitment to APEX solely because of the difference in version numbers....he has no idea what he's talking about.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-1833295658799464217?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/1833295658799464217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=1833295658799464217' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1833295658799464217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1833295658799464217'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/07/you-shouldnt-use-oracle-application.html' title='You shouldn&apos;t use Oracle Application Express because...'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-JL6EHH_EJlc/ThJchJk0DxI/AAAAAAAAB4s/TCatK8tVPMw/s72-c/dewey.jpg' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-8197181280239296563</id><published>2011-06-11T03:52:00.018-04:00</published><updated>2011-06-14T16:37:17.672-04:00</updated><title type='text'>Translations in Application Express 4.1 Early Adopter 2</title><content type='html'>With Application Express 4.1 Early Adopter 2 &lt;a href="http://joelkallman.blogspot.com/2011/06/application-express-41-early-adopter-2_10.html"&gt;recently announced&lt;/a&gt;, one of the enhancements that needs clarification are those affecting translations.  The purpose of this post isn't necessarily to explain how the translation process works in Application Express but, instead, to explain the improvements.  These aren't earth-shattering enhancements, but they're intended to improve the process and information for the developer.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;It does begin with a revision to the translation home.  Here, a developer should be able to quickly see what translations are defined for the current application and if any of them require synchronization.  A translated version requires synchronization when the primary application has been changed, but the translated version hasn't been published, to pick up this change.  Anyone who has worked with translations in the past has gone through the pain of debugging a translated version of their application, only later to realize that it's out of sync with the primary application.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-lb-164SU6PI/TffEAACipPI/AAAAAAAAB18/ySgnMrzp2i4/s1600/Screen%2Bshot%2B2011-06-11%2Bat%2B4.21.16%2BAM.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 154px;" src="http://4.bp.blogspot.com/-lb-164SU6PI/TffEAACipPI/AAAAAAAAB18/ySgnMrzp2i4/s320/Screen%2Bshot%2B2011-06-11%2Bat%2B4.21.16%2BAM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5618174564457686258" /&gt;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When it comes to seeding and publishing, these operations can now be performed on the same page and in bulk.  If you have multiple languages mapped for your application, you can quickly seed and publish them all from the same page.&lt;/div&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-_XOuUueHg2Q/TffESoLKhJI/AAAAAAAAB2E/mTChwUPTS3M/s1600/Screen%2Bshot%2B2011-06-11%2Bat%2B4.21.50%2BAM.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 96px;" src="http://2.bp.blogspot.com/-_XOuUueHg2Q/TffESoLKhJI/AAAAAAAAB2E/mTChwUPTS3M/s320/Screen%2Bshot%2B2011-06-11%2Bat%2B4.21.50%2BAM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5618174884468917394" /&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And the same type of improvement has been made to the XLIFF file upload and apply translation process.  You can now upload up to 10 XLIFF files at a time and also apply these files to different translations in one  operation.&lt;/div&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-9eebcGZkWwg/TffFYjIAglI/AAAAAAAAB2M/TNJYATcDfVE/s1600/Screen%2Bshot%2B2011-06-11%2Bat%2B4.24.32%2BAM.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 49px;" src="http://4.bp.blogspot.com/-9eebcGZkWwg/TffFYjIAglI/AAAAAAAAB2M/TNJYATcDfVE/s320/Screen%2Bshot%2B2011-06-11%2Bat%2B4.24.32%2BAM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5618176085704344146" /&gt;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lastly, and most importantly, is the ability to include the application translations in an application export.  Prior to Application Express 4.1, if you ever needed to move your application to a different workspace or different application ID, there was no practical way to bring along your translations.  You basically hit the end of the road.  Now, as an option to application export, you have the choice to include all of your translations in the application export file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While these enhancements aren't perfect, they are at least an improvement over the previous interface and process.  I must give credit to a few people for pushing for these changes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;David Bliss from the &lt;a href="https://shop.oracle.com/"&gt;Oracle Store&lt;/a&gt; team has cringed every time he has to perform the translations in Application Express 4.0 for the Oracle Store.  The Oracle Store is translated into a multitude of languages and the process he must follow is very cumbersome.  He offered to even write the necessary changes in Application Express Application Builder for us if we didn't have time.  David provided a very detailed recommendation and extensive feedback on how this should be improved.  There is nothing like getting feedback from an end-customer who frequently lives and breathes through this process.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitter.com/#!/Fr4ncis"&gt;Francis Mignault&lt;/a&gt; from &lt;a href="http://www.insum.ca/"&gt;Insum&lt;/a&gt; has been asking for years for a way to move translations from one instance to another, and to different applications.  I praise his persistence.  He also helped to rationalize the numerous ways to accomplish the same tasks.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;And lastly, credit must be given to &lt;a href="http://roelhartman.blogspot.com/"&gt;Roel Hartman&lt;/a&gt; and &lt;a href="http://www.oracle-and-apex.com/"&gt;Peter Raganitsch&lt;/a&gt; - for Peter's presentation at Oracle Gebruikersclub Holland and Roel's &lt;a href="http://roelhartman.blogspot.com/2011/03/ogh-apex-day-2011.html"&gt;blog post&lt;/a&gt; about it.  When someone says about translations in APEX "In short: it works, but takes a lot of work and maintenance is not so simple. So if you can stay away from multi-lingual applications, you should.", that is not to be perceived as a compliment.  And justifiably so.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-8197181280239296563?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/8197181280239296563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=8197181280239296563' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8197181280239296563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8197181280239296563'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/06/translations-in-application-express-41.html' title='Translations in Application Express 4.1 Early Adopter 2'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-lb-164SU6PI/TffEAACipPI/AAAAAAAAB18/ySgnMrzp2i4/s72-c/Screen%2Bshot%2B2011-06-11%2Bat%2B4.21.16%2BAM.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-1120517206669643780</id><published>2011-06-10T16:25:00.007-04:00</published><updated>2011-06-10T16:45:49.158-04:00</updated><title type='text'>Application Express 4.1 Early Adopter 2 is now available</title><content type='html'>As &lt;a href="http://joelkallman.blogspot.com/2011/06/application-express-41-early-adopter-2.html"&gt;promised&lt;/a&gt; earlier this week, Application Express 4.1 Early Adopter 2 is now available at &lt;a href="http://tryapexnow.com"&gt;http://tryapexnow.com&lt;/a&gt;.  Thanks to the many participants (1,136 total workspaces) who participated in the Early Adopter 1 of Application Express 4.1.  The feedback has been extraordinarily valuable.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A few notes about Early Adopter 2:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Nothing was migrated or updated from Early Adopter 1.  You'll need to sign up for a new workspace again in Early Adopter 2.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Some of the issues of using Internet Explorer 7 with Application Express 4.1 have been corrected, but not all of them.  You will be best-served to use IE8 or higher (if you're stuck on using Internet Explorer).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click the &lt;a href="http://apex.oracle.com/pls/apex/f?p=52663:1"&gt;"What's New"&lt;/a&gt; link to see what's new in APEX 4.1, as well as what's new in Early  Adopter 2.  Some notable additions include Data Loading wizard, Drag &amp;amp; Drop Calendar, and numerous translation improvements (including the ability, finally, to include translations in your application export).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;And just to state the obvious, this is evaluation software. You can't contact Oracle Support about any issues on tryapexnow.com. They won't have any idea what you're talking about.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thank you once again for all of your support and many contributions.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-1120517206669643780?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/1120517206669643780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=1120517206669643780' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1120517206669643780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1120517206669643780'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/06/application-express-41-early-adopter-2_10.html' title='Application Express 4.1 Early Adopter 2 is now available'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-7661037009212938671</id><published>2011-06-08T09:37:00.002-04:00</published><updated>2011-06-08T09:44:33.511-04:00</updated><title type='text'>Advanced Registration for ODTUG KScope11 ends tomorrow</title><content type='html'>The Oracle Development Tools User Group is holding their annual technical conference (named &lt;a href="http://joomla.kscope11.com/"&gt;KScope11&lt;/a&gt;) in Long Beach,  California in a few weeks.  If you're into &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt;, this is the conference for you.  There is a &lt;a href="http://joomla.kscope11.com/apex"&gt;separate track&lt;/a&gt; dedicated to Oracle Application Express.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Advanced registration, with the opportunity to save $250 off of the normal conference fee, ends tomorrow, June 9, 2011.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hope to see you there.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-7661037009212938671?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/7661037009212938671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=7661037009212938671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7661037009212938671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7661037009212938671'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/06/advanced-registration-for-odtug.html' title='Advanced Registration for ODTUG KScope11 ends tomorrow'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-7889096595680293694</id><published>2011-06-06T09:24:00.002-04:00</published><updated>2011-06-06T09:33:07.977-04:00</updated><title type='text'>Application Express 4.1 Early Adopter 2 is coming</title><content type='html'>The Early Adopter of Application Express 4.1 is progressing nicely.  There are 998 workspaces on &lt;a href="http://tryapexnow.com"&gt;http://tryapexnow.com&lt;/a&gt; and the feedback has been invaluable.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Early Adopter 2 of Application Express 4.1 is coming.  It will introduce a number of features which didn't make the cut for EA1, including Data Loading, Drag &amp;amp; Drop Calendars, and numerous translation improvements.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On or after this &lt;span class="Apple-style-span"  style="color:#FF0000;"&gt;Friday, 10-JUN-2011&lt;/span&gt;, the current Application Express instance on &lt;a href="http://tryapexnow.com"&gt;http://tryapexnow.com&lt;/a&gt; will be terminated and a new one will be created.  &lt;b&gt;Nothing&lt;/b&gt; will be migrated.  If there is any information you would like to save from your workspace, I encourage you to export it before Friday, 10-JUN-2011.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thanks once again for the tremendous response and extremely valuable feedback and guidance.  It is our customers who ultimately help make Application Express what it is.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-7889096595680293694?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/7889096595680293694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=7889096595680293694' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7889096595680293694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7889096595680293694'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/06/application-express-41-early-adopter-2.html' title='Application Express 4.1 Early Adopter 2 is coming'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-6856796293228891655</id><published>2011-05-06T15:40:00.006-04:00</published><updated>2011-05-06T16:55:50.750-04:00</updated><title type='text'>Application Express 4.1 Early Adopter 1 available</title><content type='html'>The Early Adopter 1 version of Oracle Application Express 4.1 is now available at &lt;a href="http://tryapexnow.com/"&gt;tryapexnow.com&lt;/a&gt;.  Feel free to sign up for a workspace and give it a whirl.  We welcome your feedback (via the Feedback link) at any time.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A few important points about Early Adopter 1 of Oracle Application Express 4.1:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;If you're using Internet Explorer, you will be best-served to use IE8 or higher.  You may run into difficulties with IE7, which we hope to correct in the future.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click the &lt;a href="http://apex.oracle.com/pls/apex/f?p=52663:1"&gt;"What's New"&lt;/a&gt; link to get an overview of the new features in Application Express 4.1.  You'll quickly get the sense that this is not the same "big bang" that you saw between APEX 3.2 and APEX 4.0 - but that's by design.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You will see some items listed on the &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/application-express/apex-sod-087560.html"&gt;APEX Statement of Direction&lt;/a&gt; which are not in Early Adopter 1, most notably Mobile Support and Data Upload.  Those didn't make the cut for Early Adopter 1 but we hope to be able to provide these when we refresh the tryapexnow.com instance.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When we do refresh the tryapexnow.com instance, we will &lt;b&gt;not&lt;/b&gt; be migrating any information from the workspaces there.  There's also no guarantee that what you export from APEX 4.1 Early Adopter 1 can even be imported into a later Early  Adopter instance or APEX 4.1 production.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Our friend &lt;a href="http://www.inside-oracle-apex.com/"&gt;Patrick Wolf&lt;/a&gt; should be blogging soon about the extensive changes made in support of error handling.  More explicit control over the error handling in APEX has been a long sought feature.  And hopefully this will satisfy those of you who have said the "error handling in APEX sucks" (yes, Bart, that's you).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;And just to state the obvious, this is evaluation software.  You can't contact Oracle Support about any issues on tryapexnow.com.  They won't have any idea what you're talking about.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Thank you for all of your support.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-6856796293228891655?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/6856796293228891655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=6856796293228891655' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6856796293228891655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6856796293228891655'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/05/application-express-41-early-adopter-1.html' title='Application Express 4.1 Early Adopter 1 available'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-7765264443247416247</id><published>2011-04-28T10:22:00.003-04:00</published><updated>2011-04-28T10:32:45.252-04:00</updated><title type='text'>Oracle Application Express in Research Environments</title><content type='html'>Today, Oracle issued a press release in conjunction with &lt;a href="http://www.indiana.edu/"&gt;Indiana University&lt;/a&gt;, highlighting their use of the &lt;a href="http://www.oracle.com/us/products/database/index.html"&gt;Oracle Database&lt;/a&gt; and &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt; in their research environment.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.oracle.com/us/corporate/press/367029"&gt;Indiana University Supports Researchers, Inspires Innovation and Secures More Research Grants with Web-Based Data Environment&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think it's a perfect example of:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;An organization providing access to the rich functionality of an Oracle Database as a service, on their "private cloud".&lt;/li&gt;&lt;li&gt;How Oracle Application Express can be used to provide easy access to this rich database functionality.&lt;/li&gt;&lt;li&gt;How Web and database application development via APEX is approachable by those who don't have "Web Master" on their business card.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's a natural extension to see how Oracle Application Express could be used in research environments, but on &lt;a href="http://www.oracle.com/us/products/database/exadata/index.html"&gt;Oracle Exadata&lt;/a&gt;.  Stay tuned.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-7765264443247416247?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/7765264443247416247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=7765264443247416247' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7765264443247416247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7765264443247416247'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/04/oracle-application-express-in-research.html' title='Oracle Application Express in Research Environments'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-7120551426538037613</id><published>2011-04-27T17:04:00.026-04:00</published><updated>2011-10-26T22:46:57.095-04:00</updated><title type='text'>Application Express 4.0 and Library Cache Latch Contention in Oracle DB 11.2.0.2</title><content type='html'>In January of 2011, &lt;a href="https://support.oracle.com/"&gt;Oracle Support&lt;/a&gt; approached me about a Service Request they received from a customer.  This customer had an APEX 4.0.2 application in  production with more than 1,000 users.  After they upgraded their Oracle database to version 11.2.0.2, the system ran fine for 2 days and then eventually "locked up", as they put it.  They identified the problem as being related to library cache locks, and the offending statement they reported was:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;begin wwv_flow_log.g_content_length := sys.htp.getcontentlength; end;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I reviewed the problem myself, reviewed it with a couple of other folks on the APEX development team, and we were mystified how this could possibly be related to library cache locks. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fast forward to today, and I was contacted by a completely different customer who was running a benchmark with 100 simulated concurrent users (concurrent as in &lt;b&gt;truly concurrent&lt;/b&gt; with no think time).  Their conclusion after the benchmark was that there was library cache latch contention due to Application Express, and lo and behold, the statement they identified as being the source of library cache latch contention was:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;begin wwv_flow_log.g_content_length := sys.htp.getcontentlength; end;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This was beyond coincidence that two different customers, in highly concurrent use of an APEX application, identify latch locks and/or latch contention issues with the very same line of the APEX source code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The PL/SQL block in question was in the activity logging PL/SQL package of APEX.  This is the package that writes to the activity log of Application Express, which tracks information like the application, page, user, elapsed time, etc.  One of the changes in Application Express 4.0 was a new attribute in the activity log called content length.  It was populated via a block like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;begin&lt;br /&gt;    execute immediate ('begin wwv_flow_log.g_content_length := sys.htp.getcontentlength; end;');&lt;br /&gt;exception when others then&lt;br /&gt;    g_content_length := 0;&lt;br /&gt;end;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm sure some will ask why this was done dynamically.  Simply stated, because it could not be statically compiled.  Most versions of the PL/SQL Web Toolkit will not contain the function getcontentlength() in the package specification.  So for those installations that do contain this function, the dynamic execution will succeed.  For those that don't (the vast majority), the parse of the PL/SQL block will fail, an exception will be raised, and the exception block will catch it and set a variable to 0.  But why would something like this cause library cache latch contention?  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I really had no idea.  I found no bugs on this issue.  &lt;a href="http://apex.oracle.com/"&gt;apex.oracle.com&lt;/a&gt; was on APEX 4.0.2 on 11.2.0.2 and this was never an issue.  So I diagnosed this problem the only remaining way I knew how...I &lt;a href="http://tkyte.blogspot.com/"&gt;asked Tom&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I knew in advance that Tom was going to rail about the &lt;a href="http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1155066278457"&gt;"when others"&lt;/a&gt;, but I told him I wasn't the author of this code.  He also pointed out that doing this dynamically would not result in optimal performance.  Sounds good...but that's not the source of the latch contention.  In a nutshell, Tom suspected that there is a change in the way the parse happens in 11.2, and a bad parse (i.e., failed parse) is more expensive in 11.2 than earlier database versions.  Is it a database bug?  Maybe - but it also could simply be changed behavior.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Rather than wait for this problem to be diagnosed as potentially a database bug and maybe some database patch set may contain a fix, I decided to work around this.  This particular piece of code, for all practical purposes, has been commented out - no dynamic execution, no failed parse and exception processing, for each and every invocation of the activity logging procedures.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I believe this issue is quite important.  For our customers on large, highly concurrent production sites on APEX 4.0, when they decide to upgrade to Database version 11.2.0.2, they may experience degradation in performance for the same application with the identical load.  There is now a patch set exception (a "one-off patch") for this issue for APEX 4.0.2.00.07 on &lt;a href="https://support.oracle.com/"&gt;My Oracle Support&lt;/a&gt;.  Look for patch 12404581.  The actual patch itself is not database version specific.  Hopefully this blog post (and patch) will save some of our customers from future headaches.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-7120551426538037613?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/7120551426538037613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=7120551426538037613' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7120551426538037613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7120551426538037613'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/04/application-express-40-and-library.html' title='Application Express 4.0 and Library Cache Latch Contention in Oracle DB 11.2.0.2'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-538688583837612792</id><published>2011-04-14T19:57:00.003-04:00</published><updated>2011-04-14T20:17:15.777-04:00</updated><title type='text'>Oracle Finance is looking for an experienced Application Express developer in Reston, Virginia, USA</title><content type='html'>I'm posting this to help my buddy Arie in Oracle Finance locate the right candidate.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oracle America, Inc. is looking for a competent Oracle Application Express developer, to work out of the Reston, Virginia, USA office.  OBIEE experience is also desirable.  This person would work directly for the Oracle Finance division.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you're interested in more details about this position:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Go to &lt;a href="https://irecruitment.oracle.com"&gt;https://irecruitment.oracle.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;In the field labeled "Search Job Descriptions by Keywords&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;", enter IRC1453677&lt;/li&gt;&lt;li&gt;Click the "Search" button&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-538688583837612792?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/538688583837612792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=538688583837612792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/538688583837612792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/538688583837612792'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/04/oracle-finance-is-looking-for.html' title='Oracle Finance is looking for an experienced Application Express developer in Reston, Virginia, USA'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-1139123504329532722</id><published>2011-03-29T09:46:00.004-04:00</published><updated>2011-03-29T10:07:18.635-04:00</updated><title type='text'>Oracle Application Express 4.0 with Ext JS</title><content type='html'>&lt;a href="http://www.packtpub.com/"&gt;Packt Publishing&lt;/a&gt; is certainly getting in the groove when it comes to books on &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt;.  They just released &lt;i&gt;&lt;a href="https://www.packtpub.com/oracle-application-express-4-0-with-ext-js/book"&gt;Oracle Application Express 4.0 with Ext JS&lt;/a&gt;&lt;/i&gt;, authored by &lt;a href="http://oracleinsights.blogspot.com/"&gt;Mark Lancaster&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="https://www.packtpub.com/oracle-application-express-4-0-with-ext-js/book" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 125px; height: 152px;" src="http://2.bp.blogspot.com/-jcOUdHggxCQ/TZHlxewxDnI/AAAAAAAAByc/HR4OghV-FME/s200/1063EN_Oracle%2BApex%2B4-0%2Bwith%2BExt%2BJS.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5589501250777452146" /&gt;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I won't pretend to be an expert on &lt;a href="http://www.sencha.com/products/extjs/"&gt;ExtJS&lt;/a&gt; - I'm not.  But I do know a number of customers who use Oracle Application Express combined with ExtJS and they love it.  Additionally, I do know some of them have informally consulted with Mark Lancaster, as he is one of the recognized experts on the planet for Oracle Application Express and ExtJS.  &lt;a href="http://apex.oracle.com/pls/otn/f?p=200801"&gt;Mark's Playpen&lt;/a&gt; is his hosted demonstration site of the types of things you can accomplish with APEX and ExtJS.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've browsed through this book and it seems to be another home run from Packt - very clearly presented and very polished.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-1139123504329532722?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/1139123504329532722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=1139123504329532722' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1139123504329532722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1139123504329532722'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/03/packt-publishing-is-certainly-getting.html' title='Oracle Application Express 4.0 with Ext JS'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-jcOUdHggxCQ/TZHlxewxDnI/AAAAAAAAByc/HR4OghV-FME/s72-c/1063EN_Oracle%2BApex%2B4-0%2Bwith%2BExt%2BJS.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5804220935344187032</id><published>2011-03-14T22:15:00.016-04:00</published><updated>2011-10-26T22:57:25.196-04:00</updated><title type='text'>Rewrite it in .NET</title><content type='html'>A few weeks ago I received a call from a customer who had an urgent issue.  While this customer had gone the proper route and was working with &lt;a href="https://support.oracle.com/"&gt;Oracle Support&lt;/a&gt;, they really needed an immediate resolution.  I've also worked directly with this customer since 1996 and have respect for them.  They're judicious with my time - they usually only call when the situation is dire.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This customer had an Internet facing application that was previously written using an older version of Oracle Portal.  To get a "quick win", they rewrote the application in &lt;a href="http://apex.oracle.com/"&gt;Oracle Application Express&lt;/a&gt; - it's a simple lookup application that also uses &lt;a href="http://www.oracle.com/technetwork/database/enterprise-edition/index-098492.html"&gt;Oracle Text&lt;/a&gt;.  Once they released this application, during the peak periods of the day they would witness hundreds of database sessions blocking each other.  The cause of the problem?  Why - Oracle Application Express, of course.  The director had called me to "give one last try using Oracle Application Express" before they rewrote it in .NET.  He knew how to push my buttons!  I dropped what I was doing, reviewed their Service Request with Oracle Support, and immediately arranged to visit them onsite that afternoon.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once I was onsite, the DBA showed me numerous sessions on their production system, all executing the SQL statement:&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;DELETE FROM wwv_flow_data&lt;br /&gt;WHERE flow_instance = :b1&lt;br /&gt;AND item_id IN (&lt;br /&gt;SELECT ID&lt;br /&gt;FROM wwv_flow_page_plugs&lt;br /&gt;WHERE flow_id = :b3&lt;br /&gt;AND page_id = :b2&lt;br /&gt;AND plug_source_type IN&lt;br /&gt;('SIMPLE_CHART', 'UPDATABLE_SQL_QUERY',&lt;br /&gt;'DBMSSQL_CURSOR',&lt;br /&gt;'FUNCTION_RETURNING_DBMSSQL_CURSOR',&lt;br /&gt;'FUNCTION_RETURNING_SQL_QUERY_CACHED',&lt;br /&gt;'FUNCTION_RETURNING_SQL_QUERY', 'STRUCTURED_QUERY',&lt;br /&gt;'SQL_QUERY', 'DYNAMIC_QUERY'))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;I looked at this statement and I immediately knew that this was a Reset Pagination process.  The scope of this statement is for a single logical APEX session - meaning that there are Internet users growing impatient with the performance of the application and clicking "Refresh" in their browsers.  [When a page request is executing in the APEX engine, if the end-user clicks Reload in their browser, it &lt;b&gt;will not&lt;/b&gt; preempt the database session currently processing their request - it will initiate a new request to a new database session, concurrently competing for the same finite resources as the first.]  And why would an end-user click "Refresh" in their browser?  Most likely, it's a poor performing application.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Without getting into too many details of Oracle Text, this customer had implemented their search interface such that it could easily result in a broad wildcard expansion search, i.e., the query would be expanded to essentially include all indexed search terms in their Oracle Text CONTAINS clause.  To prove my point, I asked them to isolate the query that one of these long-running sessions was performing and issue the same query from their command-line client.  The same query took between 30 and 60 seconds&lt;b&gt; &lt;/b&gt;- from the command line!  Now imagine if you're some Internet user trying to get some work done.  You enter your search terms and click Go - the natural tendency after a few seconds, let alone 60 seconds, is to try the search again.  And that's what was happening - end-users were growing impatient and repeatedly clicking Go.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The SQL statement from above (DELETE FROM wwv_flow_data...) was due to a Reset Pagination process they were performing after clicking the Go button.  The pagination information for the user in the session table of APEX would be deleted, the APEX engine intentionally does not COMMIT, and then their slow-running query would run - all the while maintaining the row-lock until the query completes.  The second session comes along (from the impatient user), the DELETE for the pagination information is issued, but now it's blocked from the first session.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My simple advice to them was to improve the performance of the application, as it was essentially unusable.  My recommendations included:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Inspect the search terms being provided, and if all of the search terms were to be eliminated because of stop words in their Oracle Text stopword list or the search terms didn't meet a minimum length, raise an error and don't issue the query.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add a PREFIX_INDEX and SUBSTRING_INDEX to their Oracle Text index, since they were performing numerous wildcard queries&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Disable the Go button after it was clicked.  This doesn't make the query run faster, but it can help to reduce the number of concurrently running sessions, emanating from an impatient user.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Change the pagination of their Classic SQL Report to "Row Ranges X to Y (with next and previous links)."  Again, this won't make the query run any faster, but this is one of the fastest pagination styles of Classic Reports - simply because it reduces the number of row fetches performed by the APEX Reporting Engine.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This customer implemented these changes over the next couple of days and they haven't had any issues since (and this was over 2 months ago).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The customer presented this as "an APEX issue."  And somehow rewriting it in .NET was going to correct all these problems.  But guess what?  If they rewrote it in .NET or PHP or Ruby or Java or Formspider or whatever, the original query that took 30 - 60 seconds to execute is going to continue to take 30 - 60 seconds to execute in all of these environments, and their end-users were going to continue to be impatient. In my recommendations above, only the last one is specific to Application Express, and that one is simply a nice-to have.  It was the first and second recommendations which fixed their application.  Was APEX the cause of their performance problem?  I say "no" - and in fact, it did a good job of &lt;b&gt;exposing &lt;/b&gt;their application problem.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5804220935344187032?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5804220935344187032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5804220935344187032' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5804220935344187032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5804220935344187032'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/03/rewrite-it-in-net.html' title='Rewrite it in .NET'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5834950856664418948</id><published>2011-02-17T11:17:00.016-05:00</published><updated>2011-10-26T22:58:32.482-04:00</updated><title type='text'>APEX and Tablespaces</title><content type='html'>Adrian, an internal employee, recently sent me the following issue/question:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;I am the administrator and owner of an internal APEX workspace.  Through time I made multiple requests to increase the storage size of this workspace each time by 10 MB. All these requests got approved and as a result the total table space should have been of at least 80-100 MB. However, it is of only 41 MB.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;To see the current table space I went to Administration &gt; Monitor Activity &gt; Report Tablespace Utilization (popup) and I got the following report:&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 13px; "&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;  &lt;table class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0" style="mso-cellspacing:0in;border:solid #AAAAAA 1.0pt;mso-yfti-tbllook:1184;  mso-padding-alt:0in 0in 0in 0in"&gt;  &lt;tbody&gt;&lt;tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes"&gt;   &lt;td nowrap="" valign="bottom" style="border:none;border-bottom:solid #AAAAAA 1.0pt;   background:#879CBD;padding:4.5pt 6.75pt 4.5pt 6.75pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;color:white"&gt;Tablespace   Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td nowrap="" valign="bottom" style="border:none;border-bottom:solid #AAAAAA 1.0pt;   background:#879CBD;padding:4.5pt 6.75pt 4.5pt 6.75pt"&gt;   &lt;p class="MsoNormal" align="right" style="text-align:right"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;color:white"&gt;Bytes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td nowrap="" valign="bottom" style="border:none;border-bottom:solid #AAAAAA 1.0pt;   background:#879CBD;padding:4.5pt 6.75pt 4.5pt 6.75pt"&gt;   &lt;p class="MsoNormal" align="right" style="text-align:right"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;color:white"&gt;Amount   Used&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td nowrap="" valign="bottom" style="border:none;border-bottom:solid #AAAAAA 1.0pt;   background:#879CBD;padding:4.5pt 6.75pt 4.5pt 6.75pt"&gt;   &lt;p class="MsoNormal" align="right" style="text-align:right"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;color:white"&gt;Amount   Free&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td nowrap="" valign="bottom" style="border:none;border-bottom:solid #AAAAAA 1.0pt;   background:#879CBD;padding:4.5pt 6.75pt 4.5pt 6.75pt"&gt;   &lt;p class="MsoNormal" align="right" style="text-align:right"&gt;&lt;b&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;color:white"&gt;Percentage   Used&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:1;mso-yfti-lastrow:yes"&gt;   &lt;td style="border-top:solid white 1.0pt;border-left:none;border-bottom:solid #CCCCCC 1.0pt;   border-right:none;background:#F4F4F4;padding:2.25pt 6.75pt 2.25pt 6.75pt"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;"&gt;APEX_1193421002954380607&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-top:solid white 1.0pt;border-left:none;border-bottom:solid #CCCCCC 1.0pt;   border-right:none;background:#F4F4F4;padding:2.25pt 6.75pt 2.25pt 6.75pt"&gt;   &lt;p class="MsoNormal" align="right" style="text-align:right"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;"&gt;43,057,152&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-top:solid white 1.0pt;border-left:none;border-bottom:solid #CCCCCC 1.0pt;   border-right:none;background:#F4F4F4;padding:2.25pt 6.75pt 2.25pt 6.75pt"&gt;   &lt;p class="MsoNormal" align="right" style="text-align:right"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;"&gt;40,697,856&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-top:solid white 1.0pt;border-left:none;border-bottom:solid #CCCCCC 1.0pt;   border-right:none;background:#F4F4F4;padding:2.25pt 6.75pt 2.25pt 6.75pt"&gt;   &lt;p class="MsoNormal" align="right" style="text-align:right"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;"&gt;2,359,296&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-top:solid white 1.0pt;border-left:none;border-bottom:solid #CCCCCC 1.0pt;   border-right:none;background:#F4F4F4;padding:2.25pt 6.75pt 2.25pt 6.75pt"&gt;   &lt;p class="MsoNormal" align="right" style="text-align:right"&gt;&lt;span style="font-size:9.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;"&gt;94.52&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; color:black"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;I then requested 10 additional MB to be added and the request was immediately approved. Then, I extracted again the above report, but the exact same values appear (total tablespace – 41MB) so the approved increase of 10 MB is not visible.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Could you please indicate if there is a limit of table space that I can request, if this is a bug or if I am no (sic) looking in the right place?&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Good question.  Adrian stumbled upon a bug in APEX, but this topic deserves some further explanation of how tablespaces are created in &lt;a href="http://apex.oracle.com/"&gt;Oracle Application Express&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When requesting or creating a new workspace in Oracle Application Express, you can choose to associate the workspace with an existing schema (one that you or a DBA may have created beforehand), or you can ask for Application Express to provision a new database user and associated tablespace.  This post is centered on the latter scenario - where APEX provisions the tablespace and user.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The actual location of the tablespace's associated data file is determined by:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;If &lt;a href="http://download.oracle.com/docs/cd/E11882_01/server.112/e17120/omf001.htm#ADMIN11481"&gt;Oracle Managed Files&lt;/a&gt; are in use, then the name of the datafile and location are determined by the DBA via the OMF setting.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If Oracle Managed Files are not in use, then the datafile is created in the same physical database file system directory where Application Express is installed.  For example, if Application Express is installed in the SYSAUX tablespace, and the location of a datafile for the SYSAUX tablespace is /d1/oracle/oradata/mydb/sysaux01.dbf, then the files for the newly provisioned tablespaces will also be created in /d1/oracle/oradata/mydb.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;In Application Express 3.2.1 and earlier, the name of the tablespace is FLOW_&lt;i&gt;x&lt;/i&gt;  and the datafile is named FLOW_&lt;i&gt;y&lt;/i&gt;.dbf, where &lt;i&gt;x&lt;/i&gt; and &lt;i&gt;y&lt;/i&gt; are an integer.  In Application Express 4.0 and later, the name of the tablespace follows the pattern of APEX_&lt;i&gt;x&lt;/i&gt; and data file name of APEX_&lt;i&gt;y&lt;/i&gt;.dbf.  In both APEX 3.2.1 and earlier and APEX 4.0, obviously, the data file name is generated by OMF when Oracle Managed Files is in use.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So how big will these files and tablespaces be when initially created?  Good question.  In APEX 3.2.1 and earlier, the data file for the provisioned tablespace is as big as the "storage request" for the workspace.  If someone signed up for a workspace and requested a 100 MB workspace, APEX would create a tablespace and associated datafile of exactly 100 MB.  The datafile of this tablespace would not autoextend.  The actual size of the data file on the file system would be 100 MB.  In our hosting of Application Express over the years, we learned two important facts:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;People will always request the maximum permitted.  If you let them choose 1 GB, they'll choose 1 GB even if they're only going to store 100 rows in a single table.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Most of the tablespaces on our hosted instances were full of "air" and occupied a lot of disk space unnecessarily.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In Application Express 4.0, we got a bit smarter.  There is now an internal instance administration setting named &lt;a href="http://download.oracle.com/docs/cd/E17556_01/doc/admin.40/e15521/adm_mg_service_set.htm#BABBIBGB"&gt;Auto Extend Tablespaces&lt;/a&gt;, and in all APEX 4.0 and later instances, this is enabled by default.  Now when a tablespace is created, the associated data file is set to autoextend up to a maximum of the requested size.   The initial size of the data file will be 10% of the requested size, and autoextend up 10% at a time.  So if you request a 100 MB workspace, the initial data file will be roughly 10 MB and autoextend 10 MB at a time up to 100 MB.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Workspace administrators can &lt;a href="http://download.oracle.com/docs/cd/E17556_01/doc/admin.40/e15521/aadm_request.htm#CIHFFGEB"&gt;request additional storage&lt;/a&gt;, and in APEX 3.2.1 and earlier, when this type of request is processed, the tablespace data file is simply resized by the requested amount.  But in APEX 4.0 and later, if the data file is set to autoextend, then when processing this type of request, the maximum size of the data file is adjusted but the data file itself is not increased in size until it needs to be (via the normal auto extend action of a tablespace).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So now getting back to Adrian's initial question, he stumbled upon a bug in Application Express 4.0.  The &lt;a href="http://download.oracle.com/docs/cd/E17556_01/doc/admin.40/e15521/aadm_request.htm#CIHHEHBA"&gt;report he was executing&lt;/a&gt; in Application Express showed the physical allocated size of the tablespace data file and did not take into account that the data file itself could grow.  To prove this, I ran the following query:&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;SQL&gt; select bytes, autoextensible, maxbytes &lt;br /&gt;       from dba_data_files &lt;br /&gt;      where tablespace_name = 'APEX_1193421002954380607';&lt;br /&gt;&lt;br /&gt;     BYTES AUT   MAXBYTES&lt;br /&gt;---------- --- ----------&lt;br /&gt;  45154304 YES  320339968&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Sure enough - Adrian's data file is only approximately 45 MB and can grow up to roughly 320 MB.  Thus, I can conclude with the following:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;This is a simple bug which will be fixed in Oracle Application Express 4.1.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Adrian -  you can take a break from making so many workspace storage requests, &lt;b&gt;please&lt;/b&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5834950856664418948?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5834950856664418948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5834950856664418948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5834950856664418948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5834950856664418948'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/02/apex-and-tablespaces.html' title='APEX and Tablespaces'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-2904756097114665499</id><published>2011-02-08T09:21:00.005-05:00</published><updated>2011-02-08T09:33:59.323-05:00</updated><title type='text'>Is Application Express only good for Excel or Access replacement?</title><content type='html'>Is &lt;a href="http://apex.oracle.com/"&gt;Oracle Application Express&lt;/a&gt; only good for Excel or Access replacement?  This is what those with no experience with Oracle Application Express like to assert.  And although I repeatedly give hard evidence on my blog about the scalability and breadth of Oracle Application Express, some (rightly so) view my writings as biased.  Your Honor, I present to you Exhibit A.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is a recent press release from our partner &lt;a href="http://www.insum.ca/"&gt;Insum Solutions inc.&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.insum.ca/pls/apex/f?p=insum_apex:9:0::NO::P9_ID_NEWS:3"&gt;MONTREAL POLYTECHNIQUE SCHOOL SELECTS INSUM SOLUTION TO DEVELOP THEIR INTERNSHIP AND JOB MANAGEMENT APPLICATION &lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A couple things to observe:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;The customer, &lt;a href="http://www.polymtl.ca/"&gt;Ecole Polytechnique de Montreal&lt;/a&gt;, decided upon an Oracle Application Express solution before putting it out for bid.&lt;/li&gt;&lt;li&gt;The application (over 100 pages, 1,500 companies, 3,000 contacts, 5,000 students) is certainly more than an Excel or Access replacement application.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-2904756097114665499?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/2904756097114665499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=2904756097114665499' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/2904756097114665499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/2904756097114665499'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/02/is-application-express-only-good-for.html' title='Is Application Express only good for Excel or Access replacement?'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-898062695381854956</id><published>2011-01-21T15:57:00.012-05:00</published><updated>2011-01-21T16:29:00.895-05:00</updated><title type='text'>Is anyone using Oracle Application Express?</title><content type='html'>Is anyone really using &lt;a href="http://apex.oracle.com/"&gt;Oracle Application Express&lt;/a&gt;?  I couldn't tell you the number of times I've been asked that question by customers.  There's been little marketing of APEX (in part because the marketing dollars flow to for-cost products &amp;amp; features), yet I believe it's grown organically at a high rate over the last few years.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://iloonellen.blogspot.com/"&gt;Iloon Ellen-Wolf&lt;/a&gt; from Oracle Support provided  a list of all of the customers who have filed a Service Request against Application Express through Oracle Support over the last two calendar years - all 1,723 of them.  And as I often say, it's a virtual who's who of the Fortune 1000.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Recently, &lt;a href="http://krisrice.blogspot.com/"&gt;Kris Rice&lt;/a&gt; was kind enough to aggregate the &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html"&gt;Oracle Technology Network download&lt;/a&gt; numbers of Application Express over the last few years, and it shows a nice trend:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;2006    83,482&lt;br /&gt;2007   107,021&lt;br /&gt;2008   119,092&lt;br /&gt;2009   148,304&lt;br /&gt;2010   209,555&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In 3 years, we have doubled the number of downloads of Oracle Application Express.  It's difficult to extrapolate this to "number of users" or "number of developers", because a single instance of Oracle Application Express &lt;b&gt;can &lt;/b&gt;suffice for hundreds of workspaces and thousands of developers and even more end-users (for example, within Oracle we have one APEX application used by 40,000 distinct users on a daily basis).  Other customers download Application Express for their personal use on XE.  So the number of developers and users per download is somewhere between 1 and "a plethora."&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Activity on &lt;a href="http://apex.oracle.com/"&gt;apex.oracle.com&lt;/a&gt; continues to be very brisk.  We typically average well over 4 million page views per week and over 500 new workspaces every week.  For the past 7 days:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Total Page Views:              4,882,817&lt;br /&gt;Distinct Applications:             3,644&lt;br /&gt;Distinct Users:                    4,141&lt;br /&gt;Number of Workspaces:             10,777&lt;br /&gt;Number of Applications:           37,883&lt;br /&gt;Workspaces Approved:                 535&lt;br /&gt;Workspaces Purged:                   578&lt;br /&gt;To be purged in a week:              594&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;535 new users in the past week alone kicking the tires of Oracle Application Express can't be all that bad.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So back to my original question - is anyone using Oracle Application Express?  Yes, without a doubt - and it continues to grow.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-898062695381854956?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/898062695381854956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=898062695381854956' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/898062695381854956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/898062695381854956'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/01/is-anyone-using-oracle-application.html' title='Is anyone using Oracle Application Express?'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-8443332397706022409</id><published>2011-01-20T13:39:00.011-05:00</published><updated>2011-01-20T19:34:28.219-05:00</updated><title type='text'>APEX 4.0 Cookbook</title><content type='html'>At the risk of alienating other authors (which is not my intent at all), I did want to raise awareness of a recently published book &lt;a href="http://www.amazon.com/gp/product/1849681341?ie=UTF8&amp;amp;tag=jkallman-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1849681341"&gt;Oracle APEX 4.0 Cookbook&lt;/a&gt; written by Marcel van der Plas and Michel van Zoest.  Very often, new developers to Oracle Application Express get up to speed quickly with the basics of APEX, but sometimes are left floundering when trying to do a specific task.  The &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/documentation/index.html"&gt;Oracle documentation on APEX&lt;/a&gt; tends to explain "what something is", and the &lt;a href="http://apex.oracle.com/pls/apex/f?p=44785:2:0:::2:P2_GROUP_ID,P2_PRODUCT_ID,P2_TAGS:1000,2039"&gt;Oracle By Examples&lt;/a&gt; are excellent soup-to-nuts tutorials, but often times, someone just wants to know "how do I do X?".  That's where I think this book does an excellent job at filling this void, with very lucid and &lt;b&gt;finite &lt;/b&gt;topics (e.g., Sending mail via APEX, Uploading and downloading files, Protecting a page using an authorization scheme).&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/1849681341?ie=UTF8&amp;amp;tag=jkallman-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1849681341"&gt;&lt;img border="0" src="https://images-na.ssl-images-amazon.com/images/I/51jaln-7HWL._SL160_.jpg" /&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jkallman-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1849681341" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P.S.  For the record, I am deeply appreciative of all authors of APEX Books who have contributed so much of their time to help grow the APEX community.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-8443332397706022409?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/8443332397706022409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=8443332397706022409' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8443332397706022409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8443332397706022409'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/01/apex-40-cookbook.html' title='APEX 4.0 Cookbook'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-7672803079896979337</id><published>2011-01-14T11:15:00.010-05:00</published><updated>2011-10-26T23:15:50.376-04:00</updated><title type='text'>Counting Clicks via Dynamic Actions</title><content type='html'>The ink was barely dry on my recent post &lt;a href="http://joelkallman.blogspot.com/2011/01/counting-clicks.html"&gt;Counting Clicks&lt;/a&gt; when &lt;a href="http://dgielis.blogspot.com/"&gt;Dimitri Gielis&lt;/a&gt; suggested a much simpler way to achieve this in Oracle Application Express 4.0.  And even though the suggested implementation is buried in the comments of that post, I wanted to explicitly offer it here.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;This second solution is even more straightforward. It involves:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;A dynamic action&lt;/li&gt;&lt;li&gt;An anchor with a specific class or ID&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's it! A demonstration of this logic is on pages 4 and 5 of this application &lt;a href="http://apex.oracle.com/pls/apex/f?p=46009:4"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;I created a simple table to store some of my most commonly used URLs. I built an application containing a report and form on top of this table, and then removed a lot of the functionality of the form to make it read-only.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then, I created a simple log table with columns for some of the information I'd like to capture:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;create table click_log(&lt;br /&gt;    user_name        varchar2(1000),&lt;br /&gt;    click_ts         timestamp,&lt;br /&gt;    ip_address       varchar2(100),&lt;br /&gt;    user_agent       varchar2(1000),&lt;br /&gt;    apex_session_id  number,&lt;br /&gt;    rownum_clicked   number,&lt;br /&gt;    info             varchar2(4000) )&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;With this basic infrastructure in place, I now want to implement the &lt;b&gt;two &lt;/b&gt;constructs to easily enable click logging of these URLs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On page 5 of my application (the "form" page), I created a dynamic action named "Log Click" and with the following attributes:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Event: Click&lt;/li&gt;&lt;li&gt;Selection Type:  jQuery Selector&lt;/li&gt;&lt;li&gt;jQuery Selector:  #link&lt;/li&gt;&lt;li&gt;Condition:  No Condition&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xzek4R5SEds/TTCAglwIr0I/AAAAAAAAByE/iF0ikNDBgUE/s1600/favoriteurls_2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 126px;" src="http://1.bp.blogspot.com/_Xzek4R5SEds/TTCAglwIr0I/AAAAAAAAByE/iF0ikNDBgUE/s200/favoriteurls_2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5562086837180739394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The True Action was of Action Type "Execute PL/SQL Code" and the actual code itself was:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;insert into click_log(&lt;br /&gt;    user_name,&lt;br /&gt;    click_ts,&lt;br /&gt;    ip_address,&lt;br /&gt;    user_agent,&lt;br /&gt;    apex_session_id,&lt;br /&gt;    rownum_clicked,&lt;br /&gt;    info )&lt;br /&gt;values&lt;br /&gt;    ( v('APP_USER'),&lt;br /&gt;      systimestamp,&lt;br /&gt;      owa_util.get_cgi_env('REMOTE_ADDR'), &lt;br /&gt;      owa_util.get_cgi_env('HTTP_USER_AGENT'), &lt;br /&gt;      v('APP_SESSION'),&lt;br /&gt;      v('P5_ID'),&lt;br /&gt;      'Clicked: ' || v('P5_NAME') );&lt;br /&gt;commit;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;So with my Dynamic Action, all I needed to do is modify the anchor on my page to include the id "link".  I did this by augmenting the URLs on my form page, changing them from:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:xml;toolbar:false;"&gt;&amp;lt;a href="http://www.amazon.com/" target="_new"&gt;http://www.amazon.com&amp;lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;to:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:xml;toolbar:false;"&gt;&amp;lt;a href="http://www.amazon.com/" target="_new" id="link"&gt;http://www.amazon.com&amp;lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Because my &lt;a href="http://api.jquery.com/id-selector/"&gt;jQuery Selector&lt;/a&gt; was for any element with an ID of "link", and I wanted the event to operate on my link, I needed to add this "id" attribute to my anchor.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;You can see a demonstration of this logic in pages 4 and 5 &lt;a href="http://apex.oracle.com/pls/apex/f?p=46009:4"&gt;here in My Favorite URLs application&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-7672803079896979337?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/7672803079896979337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=7672803079896979337' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7672803079896979337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7672803079896979337'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/01/counting-clicks-via-dynamic-actions.html' title='Counting Clicks via Dynamic Actions'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Xzek4R5SEds/TTCAglwIr0I/AAAAAAAAByE/iF0ikNDBgUE/s72-c/favoriteurls_2.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5344095907027577058</id><published>2011-01-12T15:27:00.023-05:00</published><updated>2011-10-26T23:18:48.231-04:00</updated><title type='text'>Counting clicks</title><content type='html'>In the past week, I've been asked to help implement the "counting of clicks" in two different applications, the forthcoming &lt;a href="http://apex.oracle.com/pls/apex/f?p=44785:1"&gt;Oracle Learning Library&lt;/a&gt; being one of these applications.  All that's really desired is to track when someone clicks on a link.  This is usually accomplished by responding to the click, inserting a row into a log table and then redirecting to the desired target URL. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you're familiar with &lt;a href="http://download.oracle.com/docs/cd/E17556_01/doc/apirefs.40/e15519/apex_util.htm#CHDBHDFF"&gt;APEX_UTIL.COUNT_CLICK&lt;/a&gt;, this is implemented in a similar fashion.  There is an underlying log table in Application Express which has a row inserted into it before redirecting to the desired URL.  But the requirements of these two applications were a little bit different and required something more than APEX_UTIL.COUNT_CLICK, namely:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;They wanted to preserve the logged clicks for all time and they wanted to insert into their own log table.  In the case of APEX_UTIL.COUNT_CLICK, it's actually stored in a set of two rotating tables which switch every 2 weeks.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the case of the Oracle Learning Library, we found that when you're on an SSL-rendered page, if you redirect to another URL, even a fully-qualified one, it will always redirect to an SSL (https) URL.  Thus, we needed a solution which would not do a browser redirect.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;The solution I devised was quite straightforward.  It involved:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;A page-level on-demand process&lt;/li&gt;&lt;li&gt;A local JavaScript function&lt;/li&gt;&lt;li&gt;and an anchor with an Onclick event&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's it!  A demonstration of this logic is in an application &lt;a href="http://apex.oracle.com/pls/apex/f?p=46009"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To demonstrate, I created a simple table to store some of my most commonly used URLs.  I built an application containing a report and form on top of this table, and then removed a lot of the functionality of the form to make it read-only.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then, I created a simple log table with columns for some of the information I'd like to capture:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;create table click_log(   &lt;br /&gt;    user_name        varchar2(1000),&lt;br /&gt;    click_ts         timestamp,&lt;br /&gt;    ip_address       varchar2(100),&lt;br /&gt;    user_agent       varchar2(1000),&lt;br /&gt;    apex_session_id  number,&lt;br /&gt;    rownum_clicked   number,&lt;br /&gt;    info             varchar2(4000) )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With this basic infrastructure in place, I now want to implement the three constructs to easily enable click logging of these URLs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On page 2 of my application (the "form" page), I created a PL/SQL process named LOG_CLICK with execution point "On Demand - Run this process when requested by AJAX".  It consisted of the code:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;insert into click_log(&lt;br /&gt;    user_name,&lt;br /&gt;    click_ts,&lt;br /&gt;    ip_address,&lt;br /&gt;    user_agent,&lt;br /&gt;    apex_session_id,&lt;br /&gt;    rownum_clicked,&lt;br /&gt;    info )&lt;br /&gt;values&lt;br /&gt;    ( v('APP_USER'),&lt;br /&gt;      systimestamp,&lt;br /&gt;      owa_util.get_cgi_env('REMOTE_ADDR'), &lt;br /&gt;      owa_util.get_cgi_env('HTTP_USER_AGENT'), &lt;br /&gt;      v('APP_SESSION'),&lt;br /&gt;      v('P2_ID'),&lt;br /&gt;      'Clicked: ' || v('P2_NAME') );&lt;br /&gt;commit;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note how I'm able to use both session state information via the APEX v() function and the PL/SQL Web Toolkit functions owa_util to get other information about the user.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The second part of this solution is a JavaScript function which I used to invoke my on-demand function.  I defined this in the page-level attributes of page 2 in the JavaScript section for Function and Global Variable Declaration:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;pre class="brush:js;toolbar:false;"&gt;&lt;br /&gt;function f_logClick(){&lt;br /&gt; var req = new  htmldb_Get(null,&amp;amp;APP_ID.,'APPLICATION_PROCESS=LOG_CLICK',&amp;amp;APP_PAGE_ID.);&lt;br /&gt; var gReturn = req.get();&lt;br /&gt; req = null;&lt;br /&gt; return gReturn;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm no AJAX wizard and I won't pretend to be, but this is the syntax (even in Application Express 4.0) to invoke an On-Demand process from JavaScript.  For those familiar with On-Demand process invocation, note how I had to specify &amp;amp;APP_PAGE_ID. because I defined this process at the page-level and not the application-level.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So with my On-Demand process in place and my JavaScript function defined, all I needed to do is simply employ this function.  And I did this by augmenting the URLs on my form page, changing them from:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:xml;toolbar:false;"&gt;&amp;lt;a href="http://www.amazon.com/" target="_new"&gt;http://www.amazon.com&amp;lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;to:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:xml;toolbar:false;"&gt;&amp;lt;a href="http://www.amazon.com/" target="_new" onclick="f_logClick();"&gt;http://www.amazon.com&amp;lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can see a demonstration of this logic &lt;a href="http://apex.oracle.com/pls/apex/f?p=46009"&gt;here in My Favorite URLs application&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xzek4R5SEds/TS4tIXGhrOI/AAAAAAAABx8/oROFE6ScrGk/s1600/favoriteurls.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 197px;" src="http://3.bp.blogspot.com/_Xzek4R5SEds/TS4tIXGhrOI/AAAAAAAABx8/oROFE6ScrGk/s320/favoriteurls.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5561432211512732898" /&gt;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;b&gt;Note&lt;/b&gt;&lt;/span&gt;: View the comments below for an even simpler implementation using dynamic actions, new in Application Express 4.0&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5344095907027577058?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5344095907027577058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5344095907027577058' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5344095907027577058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5344095907027577058'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/01/counting-clicks.html' title='Counting clicks'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Xzek4R5SEds/TS4tIXGhrOI/AAAAAAAABx8/oROFE6ScrGk/s72-c/favoriteurls.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-4635046281279573142</id><published>2011-01-12T09:15:00.002-05:00</published><updated>2011-01-12T09:25:46.286-05:00</updated><title type='text'>APEX 4.0.2.00.07</title><content type='html'>Today, Niels, a customer, asked me:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"We have currently installed 4.0.2.00.06 and I couldn't find any information about the upgrade from this version to 4.0.2.00.07. What are the changes? What should be installed (metalink patch or full install)?"&lt;/i&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A customer had earlier pointed out how this new .07 version had silently been rolled out.  I addressed it on the &lt;a href="http://forums.oracle.com/forums/thread.jspa?messageID=9238194&amp;amp;#9238194"&gt;OTN forum&lt;/a&gt;, but to repeat it here:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;There are two differences (bug fixes) between 4.0.2.00.06 and 4.0.2.00.07, namely:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;10347091 - Page sentry function of custom auth scheme does not work in 4.0.2.00.06&lt;/li&gt;&lt;li&gt;10406645 - Expired Application Express password cannot be changed&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These issues were discovered after the release of APEX 4.0.2.00.06 and I didn't think that the fixes for these warranted a "4.0.3".  I knew I risked confusion for our customers, which appeared to have happened, but that may only be a result of poor communication on our part.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you have APEX 4.0.0.00.46, 4.0.1.00.03 or 4.0.2.00.06 installed, you can download the patch set (p10173973_11202_GENERIC.zip) from My Oracle Support and apply it.  If you don't have Application Express installed at all, then when you &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html"&gt;download Application Express 4.0&lt;/a&gt;, you'll automatically get 4.0.2.00.07.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-4635046281279573142?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/4635046281279573142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=4635046281279573142' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4635046281279573142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4635046281279573142'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2011/01/apex-4020007.html' title='APEX 4.0.2.00.07'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-6745337521974417118</id><published>2010-12-10T12:36:00.008-05:00</published><updated>2011-01-03T11:45:14.561-05:00</updated><title type='text'>BugDB Reporting - Version 2</title><content type='html'>Sorry, but this is another post only relevant for Oracle employees.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In June 2009 I made available a simple application to reporting against the Bug Database.  I blogged about it &lt;a href="http://joelkallman.blogspot.com/2009/06/bugdb-reporting.html"&gt;here&lt;/a&gt;.  Since that time, there have been changes made to the BugDB (implementation of VPD) and also a later release of Application Express.  With the exception of the download link, everything else is accurate from that blog post, which I have copied below.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xzek4R5SEds/TQJmald8UgI/AAAAAAAABdE/fjMw1vUCvD0/s1600/BugReports2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 244px;" src="http://3.bp.blogspot.com/_Xzek4R5SEds/TQJmald8UgI/AAAAAAAABdE/fjMw1vUCvD0/s400/BugReports2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5549110297794204162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It seems a lot of teams are looking to create an analysis application on top of the BugDB, to perform their own analysis of the BugDB data for their own product.  There is a right way and a wrong way to get at this data.  The wrong &lt;span style="font-weight: bold;"&gt;slow&lt;/span&gt; way to get at this data is to build a report on top of a query across the database link to the BugDB and query this data each and every page view in your application.  The more efficient way to get at this data is to create a local table in your schema and then refresh from the BugDB into this local table, on demand.  This results in much less load on the BugDB database itself, and is also a much faster application for your end users.&lt;br /&gt;&lt;br /&gt;I actually cooked up something for someone else in Server Technologies.  It will create all the necessary database objects to refresh from the BugDB and it also includes an Interactive Report on top of the primary BugDB table RPTHEAD.  Anyone is welcome to use this application as a starting point.  It’s also hooked up with SSO authentication, so if you import this into your workspace on the internal instance of Application Express at http://apex.oraclecorp.com, you’ll be ready to go with internal single sign-on.  All you need to do is:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download and unzip the application export BugReports_installer.sql from:  &lt;a href="http://general.us.oracle.com/~jkallman/bugreports/BugReports_v2.zip"&gt;http://general.us.oracle.com/~jkallman/bugreports/BugReports_v2.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Create a database link to the BugDB named ‘BUGDB.WORLD’ in your schema.  &lt;a href="https://bug.oraclecorp.com/help/ConnectToBugHelp.html#dblink"&gt;https://bug.oraclecorp.com/help/ConnectToBugHelp.html#dblink&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Import and install the application export BugReports_v2_Installer.sql into your workspace (presumably on apex.oraclecorp.com).&lt;/li&gt;&lt;li&gt;After installation, you’ll be prompted to Install Supporting Objects.  You should simply click Next &gt; through the wizard.  &lt;span style="font-weight: bold;"&gt;Prior to this step&lt;/span&gt;, the database link BUGDB.WORLD must exist.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;That’s all there is to it!  Run the application, navigate to the Administration tab, choose your product and timeframe, click Refresh, and then click the Bugs tab to view the Interactive Report on top of your local data.&lt;br /&gt;&lt;br /&gt;It may seem like a simple application, but with the Interactive Report on top of the BugDB RPTHEAD, each end user can create a variety of customized reports &lt;span style="font-weight: bold;"&gt;and save them&lt;/span&gt;.  You can read about Interactive Reports here:  &lt;a href="http://st-curriculum.oracle.com/obe/db/apex/r40/apexirr/index.html"&gt;http://st-curriculum.oracle.com/obe/db/apex/r40/apexirr/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-6745337521974417118?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/6745337521974417118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=6745337521974417118' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6745337521974417118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6745337521974417118'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/12/bugdb-reporting-version-2.html' title='BugDB Reporting - Version 2'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Xzek4R5SEds/TQJmald8UgI/AAAAAAAABdE/fjMw1vUCvD0/s72-c/BugReports2.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5729754166609093857</id><published>2010-11-19T18:26:00.005-05:00</published><updated>2011-10-26T23:20:56.432-04:00</updated><title type='text'>Oracle Application Express 4.0.2 released</title><content type='html'>Today, Oracle Application Express 4.0.2 was released.  This corrects a number of issues discovered in the original Application Express 4.0 release as well as the Application Express 4.0.1 release.  In the README of the Application Express 4.0.2 patch set, there is a listing of all of the bugs corrected in this patch set.   You can view &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/application-express/402-patch-189110.html"&gt;a copy of it here&lt;/a&gt;.  The patch set is cumulative and includes all of the patches and bugs fixed in the Application Express 4.0.1 patch set.&lt;br /&gt;&lt;br /&gt;We have also repackaged the Oracle Application Express full distribution.  If you have never installed or upgraded to Oracle Application Express 4.0, you can download the latest full distribution and install this and you'll have Application Express 4.0.2 out-of-the-box.  Since this always creates confusion for customers (do you need the patch set or the full distribution?), use this guide:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If you have Oracle Application Express release 4.0 or Oracle Application Express 4.0.1 installed, download the Oracle Application Express 4.0.2 patch set from &lt;a href="https://support.oracle.com/"&gt;My Oracle Support&lt;/a&gt; and apply it.  Look for patch number 10173973.  Even though the file is named p10173973_11202_GENERIC.zip, seemingly only for DB 11.2.0.2, it can actually be used against any supported database version running Application Express 4.0.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you have Oracle Application Express release 3.2.1 or earlier installed (including Oracle HTML DB release 1.5), &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html"&gt;download&lt;/a&gt; and install the entire Oracle Application Express 4.0.2 release from the Oracle Technology Network (OTN).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you do not have Oracle Application Express installed, &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html"&gt;download&lt;/a&gt; and install the entire Oracle Application Express 4.0.2 release from the Oracle Technology Network (OTN).&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;And how do you determine what version you're running?  Well, if you're a DBA, you can connect to the database as SYS using SQL*Plus and issue:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;select version from sys.dba_registry where comp_id = 'APEX';&lt;/pre&gt;&lt;br /&gt;If you can login to the Application Express development environment, you'll see the version number in the lower right of every page.&lt;br /&gt;&lt;br /&gt;As mentioned in an &lt;a href="http://joelkallman.blogspot.com/2010/11/application-express-402-applied-to.html"&gt;earlier post&lt;/a&gt;, there are two new and very polished themes included in Application Express 4.0.2.  A lot of work has also gone into correcting the display and usability issues of all of the modern themes.&lt;br /&gt;&lt;br /&gt;Oracle Application Express at &lt;a href="http://apex.oracle.com/"&gt;http://apex.oracle.com&lt;/a&gt; had the final 4.0.2.00.06 patch set applied today, November 19, 2010.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5729754166609093857?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5729754166609093857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5729754166609093857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5729754166609093857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5729754166609093857'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/11/oracle-application-express-402-released.html' title='Oracle Application Express 4.0.2 released'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-535993386781439741</id><published>2010-11-14T20:14:00.004-05:00</published><updated>2010-11-14T20:25:22.783-05:00</updated><title type='text'>Did You Get Your Free Server, Yet?</title><content type='html'>Did you know that Amazon Web Services is giving away free virtual servers?  I got mine yesterday. As of November 1, 2010, &lt;a href="http://aws.amazon.com/"&gt;Amazon Web Services&lt;/a&gt; has a &lt;a href="http://aws.amazon.com/free/"&gt;free usage tier&lt;/a&gt; for a year if you sign up for a &lt;b&gt;new&lt;/b&gt; Amazon Web Services account.  You can sign up and read more &lt;a href="http://aws.amazon.com/free/"&gt;here&lt;/a&gt;.  According to Amazon:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;"To help &lt;b&gt;new AWS customers&lt;/b&gt; get started in the cloud, AWS is introducing a new free usage tier. Beginning November 1, new AWS customers will be able to run a free Amazon EC2 Micro Instance for a year, while also leveraging a new free usage tier for Amazon S3, Amazon Elastic Block Store, Amazon Elastic Load Balancing, and AWS data transfer. AWS’s free usage tier can be used for anything you want to run in the cloud: launch new applications, test existing applications in the cloud, or simply gain hands-on experience with AWS."&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;If you've ever wanted to experiment with a server in the cloud and experience the robust offering that Amazon Web Services has in this space, now's your chance.  We have had tremendous success running the Early Adopter programs of &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt; on Amazon Web Services.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-535993386781439741?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/535993386781439741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=535993386781439741' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/535993386781439741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/535993386781439741'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/11/did-you-get-your-free-server-yet.html' title='Did You Get Your Free Server, Yet?'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-1240738353488922028</id><published>2010-11-13T06:43:00.007-05:00</published><updated>2010-11-13T06:58:31.526-05:00</updated><title type='text'>Application Express 4.0.2 applied to apex.oracle.com</title><content type='html'>On Friday evening, 12-NOV-2010, a pre-release version of the Application Express 4.0.2 patch set was applied to &lt;a href="http://apex.oracle.com/"&gt;apex.oracle.com&lt;/a&gt;.  A listing of all issues corrected in this patch set will be published next week when we release this patch set on My Oracle Support.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Normally, new features are not included in a patch set but there are two new themes included in APEX 4.0.2 (themes finely crafted by &lt;a href="http://apex.shak.us/"&gt;Shakeeb&lt;/a&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Theme 21&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xzek4R5SEds/TN57mQ9dRSI/AAAAAAAAAvc/Rdw5UiXFQXw/s1600/themeshot.png"&gt;&lt;img style="display:block; border:1px solid #021a40; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 167px;" src="http://3.bp.blogspot.com/_Xzek4R5SEds/TN57mQ9dRSI/AAAAAAAAAvc/Rdw5UiXFQXw/s400/themeshot.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5539000489030272290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Theme 22&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xzek4R5SEds/TN576k_U03I/AAAAAAAAAvk/pswnkAEeFZA/s1600/themeshot.png"&gt;&lt;img style="display:block; border:1px solid #021a40; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 167px;" src="http://3.bp.blogspot.com/_Xzek4R5SEds/TN576k_U03I/AAAAAAAAAvk/pswnkAEeFZA/s400/themeshot.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5539000838004200306" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-1240738353488922028?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/1240738353488922028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=1240738353488922028' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1240738353488922028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1240738353488922028'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/11/application-express-402-applied-to.html' title='Application Express 4.0.2 applied to apex.oracle.com'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Xzek4R5SEds/TN57mQ9dRSI/AAAAAAAAAvc/Rdw5UiXFQXw/s72-c/themeshot.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5997917594219468756</id><published>2010-10-27T10:39:00.012-04:00</published><updated>2011-10-26T23:22:09.519-04:00</updated><title type='text'>Application Express, Network ACLs and Oracle Database 11gR2</title><content type='html'>In Oracle Database 11gR1, a new feature was introduced called &lt;a href="http://download.oracle.com/docs/cd/B28359_01/network.111/b28531/authorization.htm#DBSEG40012"&gt;Fine-Grained Access to External Network Services&lt;/a&gt;.  Succinctly defined, this feature gives an administrator control over which database users are permitted to access external network services, and on which ports.  If an application relied upon the PL/SQL packages UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP or UTL_INADDR, they would now need to be given permission to access the external network service via a Network ACL.  An excellent writeup of this feature is on &lt;a href="http://www.oracle-base.com/articles/11g/FineGrainedAccessToNetworkServices_11gR1.php"&gt;ORACLE-BASE&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There have been two changes in this feature in Database 11gR2 which may impact Application Express users.  These aren't necessarily documented so prominently in the release notes or README of Database 11gR2, so I felt it necessary to share them here.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;In Database 11gR2 11.2.0.1, the precedence order in evaluation of the network ACL entries has been changed to most specific to least specific.  More about this below.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In Database 11gR2 11.2.0.2, the network ACL now applies to any use of DBMS_LDAP.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;In the installation guide for Oracle Application Express, &lt;a href="http://download.oracle.com/docs/cd/E17556_01/doc/install.40/e15513/otn_install.htm#BABBHCID"&gt;we document this feature&lt;/a&gt; in Oracle Database 11gR1 and also how to create a network access control list which permits the APEX engine to access any network service on any network port.  The name of the ACL in our example is &lt;i&gt;power_users.xml&lt;/i&gt;.  It just so happened that someone else on our instance of Application Express needed access to an outbound HTTP proxy, so I created a separate network ACL for this user.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Network ACL privileges looked like:&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;SQL&gt; column host format a30&lt;br /&gt;SQL&gt; column acl format a40&lt;br /&gt;SQL&gt; select host, lower_port, upper_port, acl from dba_network_acls;&lt;br /&gt;&lt;br /&gt;HOST                           LOWER_PORT UPPER_PORT ACL&lt;br /&gt;------------------------------ ---------- ---------- ------------------------------------&lt;br /&gt;proxyserver.domain.com          80         80        /sys/acls/proxy_rule.xml&lt;br /&gt;*                                                    /sys/acls/power_users.xml&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SQL&gt; column acl format a40&lt;br /&gt;SQL&gt; column principal format a30&lt;br /&gt;SQL&gt; select acl, principal from dba_network_acl_privileges;&lt;br /&gt;&lt;br /&gt;ACL                                      PRINCIPAL&lt;br /&gt;---------------------------------------- ------------------------------&lt;br /&gt;/sys/acls/proxy_rule.xml                 SOME_OTHER_USER&lt;br /&gt;/sys/acls/power_users.xml                APEX_040000&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Prior to 11.2.0.1, if APEX_040000 needed to access the outbound HTTP proxy, this would be evaluated in terms of the least specific rule to the most specific rule.  The ACL power_users.xml permitted access to all hosts on all ports, and thus, there were no issues.  But in 11.2.0.1 and higher, this is now evaluated from &lt;b&gt;most specific to least specific&lt;/b&gt;.  If APEX_040000 now needs to access the outbound HTTP proxy, it is blocked and we'll encounter the dreaded error message &lt;span class="Apple-style-span" &gt;"ORA-24247: network access denied by access control list (ACL)"&lt;/span&gt;.  A match for the host in the outbound HTTP proxy is found in /sys/acls/proxy_rule.xml, APEX_040000 does not have privileges on that ACL, and now the fine-grained access control blocks the request.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To correct this, I had to grant privilege on the proxy ACL to APEX_040000:&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;    dbms_network_acl_admin.add_privilege(&lt;br /&gt;        acl =&gt; 'proxy_rule.xml',&lt;br /&gt;        principal =&gt; 'APEX_040000',&lt;br /&gt;        is_grant =&gt; TRUE,&lt;br /&gt;        privilege =&gt; 'connect' );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;To address the second point, in 11.2.0.2, access to the host and port specified by methods in the DBMS_LDAP PL/SQL package are now controlled via this same fine-grained access control to external network services.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I can understand, from a security perspective, why this behavior was changed.  However, if you've come to rely upon this behavior, upgrading to Oracle Database 11gR2 may introduce some changed behavior when accessing external network resources.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5997917594219468756?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5997917594219468756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5997917594219468756' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5997917594219468756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5997917594219468756'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/10/application-express-network-acls-and.html' title='Application Express, Network ACLs and Oracle Database 11gR2'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-7603087216343223003</id><published>2010-10-20T11:46:00.002-04:00</published><updated>2010-10-20T11:54:13.375-04:00</updated><title type='text'>Custom Authentication Scheme for Oracle Application Express and Oracle Access Manager - Addendum</title><content type='html'>As mentioned in my &lt;a href="http://joelkallman.blogspot.com/2010/10/custom-authentication-scheme-for-oracle.html"&gt;earlier post&lt;/a&gt; about &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt; integration with Oracle Access Manager, Dilip Gowda, an Oracle consultant, very kindly shared a Word document detailing all of the steps he performed to get Oracle Access Manager 10.1 working with Oracle Application Express 3.2.  It can be &lt;a href="http://apex.oracle.com/pls/apex/wwv_flow_file_mgr.get_file?p_security_group_id=586597513792283195&amp;amp;p_fname=Oracle%20Access%20Manager%20Integration%20with%20Oracle%20Application%20Express.doc&amp;amp;p_inline=NO"&gt;downloaded from here&lt;/a&gt;.  The custom authentication scheme for APEX should work with any APEX version - it's a generic header variable authentication scheme.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once I get Oracle Access Manager 11gR1 installed and configured, I hope to prepare and share a similar document.  The eventual goal is to turn this into an official whitepaper and then ultimately provide an out-of-the-box header variable authentication scheme in a future version of Oracle Application Express.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-7603087216343223003?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/7603087216343223003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=7603087216343223003' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7603087216343223003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7603087216343223003'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/10/custom-authentication-scheme-for-oracle_20.html' title='Custom Authentication Scheme for Oracle Application Express and Oracle Access Manager - Addendum'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-471825418061566632</id><published>2010-10-19T13:12:00.010-04:00</published><updated>2011-10-26T23:22:44.086-04:00</updated><title type='text'>Custom Authentication Scheme for Oracle Application Express and Oracle Access Manager</title><content type='html'>&lt;div&gt;Our customers frequently ask about how to integrate &lt;a href="http://www.oracle.com/us/products/middleware/identity-management/oracle-access-manager/index.html"&gt;Oracle Access Manager&lt;/a&gt; authentication with &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt;.  There is &lt;a href="http://forums.oracle.com/forums/thread.jspa?forumID=137&amp;amp;threadID=1100010"&gt;currently a thread&lt;/a&gt; on the Oracle Technology Network discussion forum, asking for this type of solution.  It has always been my intention to present this as an official whitepaper and recommended solution from Oracle.  However, I have been struggling with some Oracle Access Manager configuration issues and I simply did not want to delay any further.  The "official" whitepaper and detailed instructions will have to come later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Back in March, 2010, I took careful note of a message that &lt;a href="http://joelkallman.blogspot.com/2010/03/scott-spadafore.html"&gt;Scott Spadafore&lt;/a&gt; on our team had sent to someone in Oracle Support.  It was a generic solution for authentication via an HTTP header variable.  A couple months ago, this question came up again and &lt;a href="http://tylermuth.wordpress.com/"&gt;Tyler Muth&lt;/a&gt; provided me a slightly modified version of what Scott had originally authored.  With some more minor modifications on my part, I can share this custom authentication scheme, which can be used with Oracle Access Manager and really any environment which will securely set a header variable to an authenticated username.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The page sentry function is:&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;create or replace function header_variable_page_sentry ( p_apex_user in varchar2 default 'APEX_PUBLIC_USER' ) &lt;br /&gt;    return boolean &lt;br /&gt;as&lt;br /&gt;    l_cgi_var_name              varchar2(100) := 'REMOTE_USER';&lt;br /&gt;    l_authenticated_username    varchar2(256) := upper(owa_util.get_cgi_env(l_cgi_var_name));&lt;br /&gt;    --&lt;br /&gt;    l_current_sid               number;    &lt;br /&gt;begin&lt;br /&gt;    -- check to ensure that we are running as the correct database user&lt;br /&gt;    if user != upper(p_apex_user) then &lt;br /&gt;        return false; &lt;br /&gt;    end if;&lt;br /&gt;&lt;br /&gt;    if l_authenticated_username is null then&lt;br /&gt;        return false; &lt;br /&gt;    end if;     &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;    l_current_sid := apex_custom_auth.get_session_id_from_cookie;&lt;br /&gt;    if apex_custom_auth.is_session_valid then&lt;br /&gt;        apex_application.g_instance := l_current_sid;&lt;br /&gt;        if l_authenticated_username = apex_custom_auth.get_username then&lt;br /&gt;            apex_custom_auth.define_user_session(&lt;br /&gt;                p_user=&gt;l_authenticated_username,&lt;br /&gt;                p_session_id=&gt;l_current_sid);      &lt;br /&gt;            return true;&lt;br /&gt;        else -- username mismatch. unset the session cookie and redirect back here to take other branch&lt;br /&gt;            apex_custom_auth.logout(&lt;br /&gt;                p_this_app=&gt;v('APP_ID'),&lt;br /&gt;                p_next_app_page_sess=&gt;v('APP_ID')||':'||nvl(v('APP_PAGE_ID'),0)||':'||l_current_sid);&lt;br /&gt;            apex_application.g_unrecoverable_error := true; -- tell apex engine to quit            &lt;br /&gt;            return false;&lt;br /&gt;        end if;&lt;br /&gt;        &lt;br /&gt;    else -- application session cookie not valid; we need a new apex session&lt;br /&gt;        apex_custom_auth.define_user_session(&lt;br /&gt;            p_user=&gt;l_authenticated_username, &lt;br /&gt;            p_session_id=&gt;apex_custom_auth.get_next_session_id);&lt;br /&gt;        apex_application.g_unrecoverable_error := true; -- tell apex engine to quit&lt;br /&gt;        --&lt;br /&gt;        if owa_util.get_cgi_env('REQUEST_METHOD') = 'GET'  then&lt;br /&gt;            wwv_flow_custom_auth.remember_deep_link(p_url =&gt; 'f?'|| wwv_flow_utilities.url_decode2(owa_util.get_cgi_env('QUERY_STRING')));&lt;br /&gt;        else&lt;br /&gt;            wwv_flow_custom_auth.remember_deep_link(p_url=&gt;'f?p='||&lt;br /&gt;                to_char(apex_application.g_flow_id)||':'||&lt;br /&gt;                to_char(nvl(apex_application.g_flow_step_id,0))||':'||&lt;br /&gt;                to_char(apex_application.g_instance));&lt;br /&gt;        end if;&lt;br /&gt;        --        -- register session in APEX sessions table,set cookie,redirect back&lt;br /&gt;        apex_custom_auth.post_login( &lt;br /&gt;            p_uname      =&gt; l_authenticated_username,&lt;br /&gt;            p_session_id =&gt; nv('APP_SESSION'),&lt;br /&gt;            p_app_page   =&gt; apex_application.g_flow_id||':'||nvl(apex_application.g_flow_step_id,0)); &lt;br /&gt;        return false;        &lt;br /&gt;    end if;    &lt;br /&gt;end header_variable_page_sentry;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;The high-level steps to be performed are:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Compile this function header_variable_page_sentry in the parsing schema of your application&lt;/li&gt;&lt;li&gt;Create a new custom authentication scheme.  In the Page Sentry Function attribute of the custom authentication scheme, enter:  return header_variable_page_sentry;&lt;/li&gt;&lt;li&gt;Add directive &lt;a href="http://download.oracle.com/docs/cd/E14571_01/portal.1111/e12041/concept.htm#YPMOD384"&gt;PlsqlCGIEnvironmentList&lt;/a&gt; &lt;header_variable&gt; inside the corresponding APEX Database Access Descriptor.  By default, OAM Webgate uses the header variable REMOTE_USER.&lt;/li&gt;&lt;li&gt;Secure the APEX application in Oracle Access Policy Manager by defining its corresponding Policy Domain.&lt;/li&gt;&lt;li&gt;Back in your APEX application, make this new authentication scheme "current" for your application.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;The custom authentication scheme should work in any version of Application Express.  A gentleman from Oracle Consulting got this to work at a customer site using APEX 3.2 and OAM 10g.  He very graciously put together a document detailing all of the steps he performed in Application Express and Oracle Access Manager to get this to work, which is invaluable to someone like me who is essentially OAM-ignorant.  I've asked for his permission to share this document, and when/if I get his okay, I'll make it available from this blog.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-471825418061566632?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/471825418061566632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=471825418061566632' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/471825418061566632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/471825418061566632'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/10/custom-authentication-scheme-for-oracle.html' title='Custom Authentication Scheme for Oracle Application Express and Oracle Access Manager'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5865942805979861521</id><published>2010-09-27T13:44:00.007-04:00</published><updated>2010-09-27T13:52:39.211-04:00</updated><title type='text'>Brief Discussion of Oracle Application Express</title><content type='html'>Last week at &lt;a href="http://www.oracle.com/us/openworld/index.htm"&gt;Oracle OpenWorld 2010&lt;/a&gt; in San Francisco, &lt;a href="http://blogs.oracle.com/otn/"&gt;Justin Kestelyn&lt;/a&gt; of the &lt;a href="http://otn.oracle.com/"&gt;Oracle Technology Network&lt;/a&gt; interviewed Oracle Application Express Product Manager &lt;a href="http://dpeake.blogspot.com/"&gt;David Peake&lt;/a&gt;.  If you're looking for a fairly short discussion about &lt;a href="http://apex.oracle.com/"&gt;Oracle Application Express&lt;/a&gt;, this is a good place to start as I thought David's message was clear.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://medianetwork.oracle.com/media/show/15661?n=subCategory&amp;amp;nid=33"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 230px;" src="http://2.bp.blogspot.com/_Xzek4R5SEds/TKDY74Q83qI/AAAAAAAAAvU/WoK1vO0dXfg/s400/otn2.jpg" alt="" id="BLOGGER_PHOTO_ID_5521651666383593122" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5865942805979861521?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5865942805979861521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5865942805979861521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5865942805979861521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5865942805979861521'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/09/brief-discussion-of-oracle-application.html' title='Brief Discussion of Oracle Application Express'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xzek4R5SEds/TKDY74Q83qI/AAAAAAAAAvU/WoK1vO0dXfg/s72-c/otn2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-713709211099035117</id><published>2010-09-19T18:00:00.002-04:00</published><updated>2010-09-19T18:07:17.445-04:00</updated><title type='text'>Customizing the look of Interactive Reports</title><content type='html'>If you've ever wanted to have precise control over the look and feel of the Interactive Reports in your &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt; application, take a look at Shakeeb Rahman's recent blog post on his new blog &lt;a href="http://apex.shak.us"&gt;http://apex.shak.us&lt;/a&gt;.  Shakeeb Rahman is on the Application Express product development team and is the master of all things HTML and CSS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-713709211099035117?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/713709211099035117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=713709211099035117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/713709211099035117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/713709211099035117'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/09/customizing-look-of-interactive-reports.html' title='Customizing the look of Interactive Reports'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5331194776936390221</id><published>2010-09-15T22:32:00.004-04:00</published><updated>2010-09-16T04:38:02.690-04:00</updated><title type='text'>APEX events at Oracle OpenWorld 2010 - for your iPhone</title><content type='html'>&lt;a href="http://marcsewtz.blogspot.com/"&gt;Marc Sewtz&lt;/a&gt; from the &lt;a href="http://apex.oracle.com/"&gt;Oracle Application Express&lt;/a&gt; development team has been busy crafting a set of HTML templates and styleswhich are suitable for an iPhone or other small device.  And to demonstrate this, Marc has crafted an APEX application running on apex.oracle.com (and Application Express 4.0) listing all of the Application Express-related sessions at Oracle OpenWorld 2010.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bookmark this:  &lt;a href="http://apex.oracle.com/pls/apex/f?p=oow2010"&gt;http://apex.oracle.com/pls/apex/f?p=oow2010&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And you can read more about it on &lt;a href="http://marcsewtz.blogspot.com/2010/09/getting-ready-for-oracle-open-world.html"&gt;Marc's blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S.  Don't bother using this application with Firefox nor Internet Explorer. It will work with any Webkit-based browser (Safari, Chrome).  But it will look even better on your iPhone or Droid.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5331194776936390221?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5331194776936390221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5331194776936390221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5331194776936390221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5331194776936390221'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/09/apex-events-at-oracle-openworld-2010.html' title='APEX events at Oracle OpenWorld 2010 - for your iPhone'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-7064375147121689198</id><published>2010-09-14T23:40:00.010-04:00</published><updated>2011-10-26T23:23:29.296-04:00</updated><title type='text'>SINCE when?</title><content type='html'>This will not be new information for long-time &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt; users, but it's worth mentioning for those new to Oracle Application Express.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In APEX page items (those using Automatic DML) and columns in SQL Reports &amp;amp; Interactive Reports, you have the ability to format date and timestamp values using a variety of format masks.  Every report column and form page item has a format attribute.  For date and timestamp columns, you can specify any valid Oracle date or timestamp format mask, with a full listing provided &lt;a href="http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements004.htm#CDEHIFJA"&gt;here&lt;/a&gt;.  Some examples include:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    MM/DD/YYYY&lt;/div&gt;&lt;div&gt;    DD.MM.RRRR&lt;/div&gt;&lt;div&gt;    DS FMHH24:MI:SS &lt;/div&gt;&lt;div&gt;    DL&lt;/div&gt;&lt;div&gt;    RRRR-MM-DD"T"hh24:mi:ss.xff&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In APEX applications, you can also employ the &lt;i&gt;SINCE &lt;/i&gt;format mask on date and timestamp columns.  This is specific to APEX applications in the context of the format mask for report columns and Automatic DML page items.  Instead of showing your end-users values like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    09/11/2010&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;you can present a value of:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    3 days ago&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The time period is relative to the difference between the time it is rendered and the value itself. Values can include 'seconds ago', 'minutes ago', 'hours ago', 'days ago', 'weeks ago', 'months ago', and 'years ago'.  The benefit of using SINCE is:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;It's time zone agnostic.  Regardless of the time zone of your end user, 3 minutes ago is always 3 minutes ago.&lt;/li&gt;&lt;li&gt;It's locale agnostic.  Some locales interpret 09/11 as September 11, other locales interpret 09/11 as November 9.  Everyone interprets '3 days ago' as 3 days ago.&lt;/li&gt;&lt;li&gt;It's translated into the 10 languages provided for Application Express 4.0.  The output will be correctly translated based upon your user's language preference.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;New in Application Express 4.0:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Support for future dates and timestamps.  You can now have values like '3 weeks from now', '2 days from now'.  &lt;/li&gt;&lt;li&gt;Support for the SINCE format mask against columns of type TIMESTAMP, TIMESTAMP WITH TIME ZONE and TIMESTAMP WITH LOCAL TIME ZONE.&lt;/li&gt;&lt;li&gt;And an API (should be documented, but I find that it's not right now) to compute this yourself:&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;APEX_UTIL.GET_SINCE( p_date IN DATE ) RETURN VARCHAR2&lt;br /&gt;&lt;br /&gt;APEX_UTIL.GET_SINCE_TSWTZ( p_timestamp IN TIMESTAMP WITH TIME ZONE ) RETURN VARCHAR2&lt;br /&gt;&lt;br /&gt;APEX_UTIL.GET_SINCE_TSWLTZ( p_ltimestamp IN TIMESTAMP WITH LOCAL TIME ZONE ) RETURN VARCHAR2&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Impress your boss and your end-users with the SINCE format mask!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-7064375147121689198?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/7064375147121689198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=7064375147121689198' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7064375147121689198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7064375147121689198'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/09/since-when.html' title='SINCE when?'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-8877722957377981156</id><published>2010-09-02T14:53:00.004-04:00</published><updated>2010-09-02T14:55:35.760-04:00</updated><title type='text'>Going to Oracle OpenWorld 2010?</title><content type='html'>Are you going to &lt;a href="http://www.oracle.com/us/openworld/index.htm"&gt;Oracle OpenWorld 2010&lt;/a&gt;, which starts on September 19, 2010?  If so, be sure to attend the "APEX Meetup" on Tuesday night.  Dimitri has more information &lt;a href="http://dgielis.blogspot.com/2010/09/apex-meetup-oow-2010.html"&gt;on his blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-8877722957377981156?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/8877722957377981156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=8877722957377981156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8877722957377981156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8877722957377981156'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/09/going-to-oracle-openworld-2010.html' title='Going to Oracle OpenWorld 2010?'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-3195441152749658794</id><published>2010-09-02T13:43:00.018-04:00</published><updated>2011-10-26T23:24:27.046-04:00</updated><title type='text'>Automatic Time Zone support in Application Express 4.0</title><content type='html'>A feature of &lt;a href="http://apex.oracle.com/"&gt;Application Express 4.0&lt;/a&gt; which hasn't received a lot of press but is useful for those building applications that span time zones is the &lt;a href="http://download.oracle.com/docs/cd/E17556_01/doc/user.40/e15517/bldr.htm#CHDBHCBB"&gt;Automatic Time Zone&lt;/a&gt; application attribute.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Oracle database has this wonderfully rich data type called &lt;a href="http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/sql_elements001.htm#sthref163"&gt;TIMESTAMP WITH LOCAL TIME ZONE&lt;/a&gt;.  The elegance of this data type is that the value stored in this column will be displayed in the user's current database session time zone.  Having &lt;a href="http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:5011677391274#tom8218209147129"&gt;written a PL/SQL package&lt;/a&gt; to do time zone conversion, it is a non-trival exercise to develop this type of functionality let alone maintain it.  Wouldn't it be great if we could put this burden of maintaining constantly evolving time zone rules and daylight saving time dates on the database?  Well, you get this for free with TIMESTAMP WITH LOCAL TIME ZONE.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So if all we need to do is set the &lt;b&gt;database &lt;/b&gt;session time zone, then:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;How do we elegantly derive this for each end user of our application?&lt;/li&gt;&lt;li&gt;How do we ensure that every page view and page submission in Application Express has its database session time zone set correctly for a particular user?&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There were numerous suggestions in the past, of storing a user's preferred time zone as a preference and then authoring a PL/SQL block in the VPD attribute of an application like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;execute immediate 'alter session set time_zone =''' || :MY_USER_TIMEZONE || '''';&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Not exactly obvious.  And this still doesn't answer question #1 of how do we elegantly derive this.  This is where the new Automatic Time Zone attribute is useful.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the Application Builder, if you edit the Application Properties and navigate to the Globalization subtab, you should see something like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xzek4R5SEds/TH_oIONPobI/AAAAAAAAAuw/ZyxTkOTuJvo/s1600/atz_1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 146px;" src="http://1.bp.blogspot.com/_Xzek4R5SEds/TH_oIONPobI/AAAAAAAAAuw/ZyxTkOTuJvo/s400/atz_1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5512379696875020722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By default, Automatic Time Zone will be set to 'No'.  When set to 'Yes', this will now change the behavior of your application:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;At the beginning of an Application Express session (which happens at the beginning each time a user runs your application ), the time zone offset will be calculated from their Web browser client.&lt;/li&gt;&lt;li&gt;This time zone offset information will be sent to Application Express and recorded in the APEX session information for that user.&lt;/li&gt;&lt;li&gt;Then, each and every page view for the duration of their APEX session, the Application Express engine will read this value and set the database session time zone to this value.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;All you have to do is employ data types which are time zone aware (like TIMESTAMP WITH LOCAL TIME ZONE;  DATE is not time zone aware) and check a box in your application definition.  It couldn't be simpler!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To demonstrate this, I created a simple application using the following DDL:&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;create table tz_log( &lt;br /&gt;    id number primary key, &lt;br /&gt;    username varchar2(255) not null, &lt;br /&gt;    tz varchar2(512) not null, &lt;br /&gt;    created_ts timestamp not null );&lt;br /&gt;&lt;br /&gt;create or replace trigger tz_log_trg1&lt;br /&gt;    before insert on tz_log&lt;br /&gt;    for each row&lt;br /&gt;begin&lt;br /&gt;    if :new.id is null then&lt;br /&gt;        :new.id := to_number(sys_guid(),'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');&lt;br /&gt;    end if;&lt;br /&gt;    --&lt;br /&gt;    :new.created_ts := localtimestamp;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Then, I just built an application with a SQL report on this table and added an on New Instance PL/SQL Process of:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;insert into tz_log (username, tz) values(:APP_USER, apex_util.get_session_time_zone );&lt;br /&gt;commit;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can run this &lt;a href="https://apex.oracle.com/pls/apex/f?p=27207:1"&gt;sample application here&lt;/a&gt;.  Just keep in mind - it will require you to authenticate with your oracle.com credentials (the same credentials you use if you login to the OTN discussion forum) and it will record your visit in a log table, which others can view.  Here's what it looks like - nothing fancy:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xzek4R5SEds/TH_q6mWSAfI/AAAAAAAAAu4/mCinq6Lig3k/s1600/atz_2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 161px;" src="http://2.bp.blogspot.com/_Xzek4R5SEds/TH_q6mWSAfI/AAAAAAAAAu4/mCinq6Lig3k/s320/atz_2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5512382761372090866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you pay close attention, immediately after authentication, you'll see a URL like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;https://apex.oracle.com/pls/otn/f?p=27207:1:127976719236631&amp;amp;tz=-4:00&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Obviously, your APEX session identifier and time zone value will be different than what I show above.  But you'll see that there is a new parameter 'tz' to the 'f' procedure.  And it is through this interface that you can create a URL to an APEX application and explicitly set the APEX session time zone to a different value.  After you login, change the time zone value in the URL to something else (e.g., tz=0:00) and watch the values in the "Inserted into the Log Table (in your local time zone)" report column automatically adjust to that time zone.  The underlying report definition didn't change - we're still simply selecting the TIMESTAMP WITH LOCAL TIME ZONE column out of the database, just now the database is automatically converting that value to display in the current session time zone.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can also programmatically set and get the APEX session time zone setting using two new APIs in Application Express 4.0, namely &lt;a href="http://download.oracle.com/docs/cd/E17556_01/doc/apirefs.40/e15519/apex_util.htm#insertedID99"&gt;APEX_UTIL.SET_SESSION_TIME_ZONE&lt;/a&gt; and &lt;a href="http://download.oracle.com/docs/cd/E17556_01/doc/apirefs.40/e15519/apex_util.htm#insertedID56"&gt;APEX_UTIL.GET_SESSION_TIME_ZONE&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-3195441152749658794?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/3195441152749658794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=3195441152749658794' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3195441152749658794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3195441152749658794'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/09/automatic-time-zone-support-in.html' title='Automatic Time Zone support in Application Express 4.0'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Xzek4R5SEds/TH_oIONPobI/AAAAAAAAAuw/ZyxTkOTuJvo/s72-c/atz_1.png' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-9142258415799303814</id><published>2010-08-22T22:01:00.009-04:00</published><updated>2010-08-23T06:08:09.492-04:00</updated><title type='text'>Pelotonia10</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xzek4R5SEds/THHbyUa74_I/AAAAAAAAAug/CTIqdWF4ODo/s1600/team.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 239px;" src="http://4.bp.blogspot.com/_Xzek4R5SEds/THHbyUa74_I/AAAAAAAAAug/CTIqdWF4ODo/s320/team.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5508425476772455410" /&gt;&lt;/a&gt;&lt;br /&gt;Sorry, this is not a post about anything Oracle-related.  But as our dear, departed friend &lt;a href="http://carlback.blogspot.com/2006/11/silence-of-cell-phone-sorry-people.html"&gt;Carl used to say&lt;/a&gt; - it's my blog.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I had the privilege of participating in this year's &lt;a href="http://www.pelotonia.org/"&gt;Pelotonia&lt;/a&gt; bike tour.  What is Pelotonia, you may ask?  "Pelotonia is a grassroots bike tour with one goal: to end cancer. Pelotonia raises money for innovative and life saving cancer research at &lt;a href="http://cancer.osu.edu/"&gt;The Ohio State University Comprehensive Cancer Center - James Cancer Hospital and Solove Research Institute&lt;/a&gt;."&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This event had special significance for me, as our next-door neighbor, Jacob Carlino, was diagnosed with a rare form of cancer earlier this year and is undergoing treatment now.  Jacob is 12 years old.  A child like Jacob or any person, for that matter, shouldn't have to suffer through this horrible disease.  Jacob's father Dave organized a team in support of his son Jacob, and I had the privilege of being on this team.  Above is the team - Dan, Matt, Scott, me and Dave.  On the front of our shirts is a picture of Jacob who we were honoring with our team's tour.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pelotonia was a most-impressive and well-organized event.  There were over 4,000 riders and thousands of volunteers in addition to a great deal of corporate sponsorship.  The estimate is that this one event will raise over $8 million, with 100% of this money going directly to fund cancer research at the Ohio State University Cancer Care Center and Solove Research Institute.  The honorary chair of this year's Pelotonia tour was &lt;a href="http://en.wikipedia.org/wiki/Ohio_State_Buckeyes_football"&gt;Ohio State football&lt;/a&gt; legend &lt;a href="http://en.wikipedia.org/wiki/Chris_Spielman"&gt;Chris Spielman&lt;/a&gt;, who he himself lost his wife to cancer just 9 short months ago.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My goal for this blog post?  To simply raise awareness of this disease, and to also let the world know that there is an ever-growing army of people right here in &lt;a href="http://en.wikipedia.org/wiki/Ohio"&gt;Ohio&lt;/a&gt; who is contributing in ways small and large to the eradication of this disease.  Lastly, I would like to recognize and thank the sponsors of me for this ride - I am grateful for your generous support:  Sue, Sergio &amp;amp; Priscila, Jason &amp;amp; Shelley, Eric, Bob &amp;amp; Marge, Matt &amp;amp; Gretchen, Tim &amp;amp; Susie, Anton &amp;amp; Chris, Kathy &amp;amp; Terry, Neil &amp;amp; Margaret, Tom, Nada &amp;amp; Matt, Frank, Harry, and Mike &amp;amp; Anita.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-9142258415799303814?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/9142258415799303814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=9142258415799303814' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/9142258415799303814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/9142258415799303814'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/08/pelotonia10.html' title='Pelotonia10'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xzek4R5SEds/THHbyUa74_I/AAAAAAAAAug/CTIqdWF4ODo/s72-c/team.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-2877496972256732605</id><published>2010-08-18T10:00:00.009-04:00</published><updated>2011-10-26T23:25:06.358-04:00</updated><title type='text'>Application Express 4.0.1 released</title><content type='html'>Today, Oracle Application Express 4.0.1 was released.  This corrects a number of issues discovered in the original Application Express 4.0 release.  In the README of the Application Express 4.0.1 patch set, there is a listing of all of the bugs corrected in this patch set.   You can view &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/401-patch-166923.html"&gt;a copy of it here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We have also repackaged the Oracle Application Express full distribution.  If you have never installed or upgraded to Oracle Application Express 4.0, you can download the latest full distribution and install this and you'll have Application Express 4.0.1 out-of-the-box.  Since this always creates confusion for customers (do you need the patch set or the full distribution?), use this guide:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If you have Oracle Application Express release 4.0 installed, download the Oracle Application Express 4.0.1 patch set from &lt;a href="https://support.oracle.com"&gt;My Oracle Support&lt;/a&gt; and apply it.  Look for patch number 9976149.  Even though the file is named p9976149_11201_GENERIC.zip, seemingly only for DB 11.2.0.1, it can actually be used against any supported database version running Application Express 4.0.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you have Oracle Application Express release 3.2.1 or earlier installed (including Oracle HTML DB release 1.5), &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html"&gt;download&lt;/a&gt; and install the entire Oracle Application Express 4.0.1 release from the Oracle Technology Network (OTN).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you do not have Oracle Application Express installed, &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html"&gt;download&lt;/a&gt; and install the entire Oracle Application Express 4.0.1 release from the Oracle Technology Network (OTN).&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;And how do you determine what version you're running?  Well, if you're a DBA, you can connect to the database as SYS using SQL*Plus and issue:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;select version from sys.dba_registry where comp_id = 'APEX';&lt;/pre&gt;&lt;br /&gt;If you can login to the Application Express development environment, you'll see the version number in the lower right of every page.&lt;br /&gt;&lt;br /&gt;Oracle Application Express at &lt;a href="http://apex.oracle.com"&gt;http://apex.oracle.com&lt;/a&gt; had the 4.0.1.00.03 patch set applied on Saturday, August 14, 2010.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-2877496972256732605?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/2877496972256732605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=2877496972256732605' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/2877496972256732605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/2877496972256732605'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/08/application-express-401-released.html' title='Application Express 4.0.1 released'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-4923360027237357004</id><published>2010-08-13T15:03:00.006-04:00</published><updated>2010-08-13T15:24:54.560-04:00</updated><title type='text'>Application Express and parsing of SQL</title><content type='html'>Recently, I worked with &lt;a href="https://support.oracle.com"&gt;Oracle Support&lt;/a&gt; who was helping a customer who had a variety of questions about &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt;.  One of the questions was:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;"Please provide a detailed explanation of how apex interacts with database security. It appears that apex is manipulating queries prior to presenting them tot he database to be run either by wrapping them in a pl/sql block that prevents role based security from working or doing a pre-security check that doesn't check role level security prior to issuing a query, or some other even that bypasses role based security. "&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Since there really isn't any great explanation of this anywhere, I'd like to provide a brief but lucid explanation about how parsing of SQL works in Oracle Application Express.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The Oracle database ships with a supplied PL/SQL package named &lt;a href="http://download.oracle.com/docs/cd/E11882_01/appdev.112/e10577/d_sql.htm#BABEDAHF"&gt;DBMS_SQL&lt;/a&gt;, to perform the execution of dynamic SQL.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The Oracle database also ships with a supplied but undocumented PL/SQL package named SYS.DBMS_SYS_SQL.  This package enables the execution of dynamic SQL but it also enables the parsing of a statement &lt;span style="font-weight: bold;"&gt;as a specific database user&lt;/span&gt; and with the privileges of this specific database user.  This PL/SQL package is highly privileged, obviously.  The EXECUTE privilege on this package is not granted to database user, by default.  It should almost never be granted to any database user, ever.  When asked to grant execution on this package to someone, a smart DBA will always say "no."&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Until Database version 10.2.0.3, both DBMS_SQL and DBMS_SYS_SQL would not observe roles when parsing SQL.  This was consistent with database object access in PL/SQL itself (database roles are not observed in PL/SQL, in case you didn't know).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In Database 10.2.0.3 and later (and XE), SYS.DBMS_SYS_SQL was changed to support a flag which enabled the observation of database roles when parsing SQL.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In Application Express 2.1 and later, support was added to Oracle Application Express SQL Workshop on DB versions 10.2.0.3 and later to observe database roles, to be consistent with SQL*Plus.  However, the execution of SQL in an Application Express application still does not observe roles when parsing user SQL.  This remains true for the recently released Application Express 4.0.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;So this explains a few things:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If you've ever wondered how Application Express can parse SQL as a specific database user and with the privileges of this database user but without ever connecting as that database user, this is the answer - DBMS_SYS_SQL.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When a new database user/schema is provisioned through Application Express, the discrete system privileges are granted to this new database user and not through any database role.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When you look the underlying database view V$SESSION, it will show that the database sessions associated with Application Express applications are connected as the minimally privileged database user APEX_PUBLIC_USER (or ANONYMOUS, if you're using the embedded PL/SQL  gateway).  But within that session, the underlying Application Express engine is being invoked and, after determining who the SQL can be parsed as for that specific page view, the SQL is being parsed as a different database user.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This also explains why, in some database versions, it will appear that roles are enabled when you issue DML statements from SQL Commands in SQL Workshop, but in the development of your application and in the execution of your application, it will appear that database roles are not enabled and that direct object privileges are required.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-4923360027237357004?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/4923360027237357004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=4923360027237357004' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4923360027237357004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4923360027237357004'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/08/application-express-and-parsing-of-sql.html' title='Application Express and parsing of SQL'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-8930181577455669940</id><published>2010-07-23T00:15:00.014-04:00</published><updated>2011-10-26T23:26:04.293-04:00</updated><title type='text'>Moving your XLIFF Files</title><content type='html'>The XML translation files generated from &lt;a href="http://apex.oracle.com/"&gt;Oracle Application Express&lt;/a&gt; are produced in &lt;a href="http://docs.oasis-open.org/xliff/xliff-core/xliff-core.html"&gt;XML Localization Interchange File Format (XLIFF)&lt;/a&gt; format.   XLIFF is a recognized standard for the localization of computer software.  &lt;i&gt;"It is intended to give any software provider a single interchange file format that can be understood by any localization provider."&lt;/i&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;One of the unique characteristics of Application Express is that it is one of the few development frameworks where the decision to localize and translate an application can be made &lt;b&gt;after&lt;/b&gt; the application is actually completed.  Because the definition of the application is maintained in meta data in the APEX repository, it's already known in advance which attributes of your application are translatable and which are not.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The process to produce a translated application is pretty straightforward.  It's as simple as:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Seed the translation repository from your existing application&lt;/li&gt;&lt;li&gt;Export the XLIFF file&lt;/li&gt;&lt;li&gt;Translate the XLIFF file&lt;/li&gt;&lt;li&gt;Upload the XLIFF file&lt;/li&gt;&lt;li&gt;Apply the XLIFF file&lt;/li&gt;&lt;li&gt;Publish your translated application&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The first few translation unit lines of a sample XLIFF file generated from Application Express look like:&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush:xml;toolbar:false;"&gt;&lt;br /&gt;&lt;trans-unit id="S-2-885632848731895778-25721"&gt;&lt;br /&gt;&lt;source&gt;Logout&lt;/source&gt;&lt;br /&gt;&lt;target&gt;Logout&lt;/target&gt;&lt;br /&gt;&lt;/trans-unit&gt;&lt;br /&gt;&lt;trans-unit id="S-2-885632950195895779-25721"&gt;&lt;br /&gt;&lt;source&gt;Print&lt;/source&gt;&lt;br /&gt;&lt;target&gt;Print&lt;/target&gt;&lt;br /&gt;&lt;/trans-unit&gt;&lt;br /&gt;&lt;trans-unit id="S-2.1-885632848731895778-25721"&gt;&lt;br /&gt;&lt;source&gt;Logout&lt;/source&gt;&lt;br /&gt;&lt;target&gt;Logout&lt;/target&gt;&lt;br /&gt;&lt;/trans-unit&gt;&lt;br /&gt;&lt;trans-unit id="S-2.1-885632950195895779-25721"&gt;&lt;br /&gt;&lt;source&gt;Print&lt;/source&gt;&lt;br /&gt;&lt;target&gt;Print&lt;/target&gt;&lt;br /&gt;&lt;/trans-unit&gt;&lt;br /&gt;&lt;trans-unit id="S-4-885632364763895772-25721"&gt;&lt;br /&gt;&lt;source&gt;Home&lt;/source&gt;&lt;br /&gt;&lt;target&gt;Home&lt;/target&gt;&lt;br /&gt;&lt;/trans-unit&gt;&lt;br /&gt;&lt;trans-unit id="S-4-885632445599895776-25721"&gt;&lt;br /&gt;&lt;source&gt;Customers&lt;/source&gt;&lt;br /&gt;&lt;target&gt;Customers&lt;/target&gt;&lt;br /&gt;&lt;/trans-unit&gt;&lt;br /&gt;&lt;trans-unit id="S-4-885632564774895777-25721"&gt;&lt;br /&gt;&lt;source&gt;Products&lt;/source&gt;&lt;br /&gt;&lt;target&gt;Products&lt;/target&gt;&lt;br /&gt;&lt;/trans-unit&gt;&lt;br /&gt;&lt;trans-unit id="S-4-885632638841895777-25721"&gt;&lt;br /&gt;&lt;source&gt;Orders&lt;/source&gt;&lt;br /&gt;&lt;target&gt;Orders&lt;/target&gt;&lt;br /&gt;&lt;/trans-unit&gt;&lt;br /&gt;&lt;trans-unit id="S-4-885632745057895778-25721"&gt;&lt;br /&gt;&lt;source&gt;Charts&lt;/source&gt;&lt;br /&gt;&lt;target&gt;Charts&lt;/target&gt;&lt;br /&gt;&lt;/trans-unit&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Each translatable string is included as a 'trans-unit' in the XLIFF file.  The last two elements of each translation unit ID are the meta data ID and the application ID.  For example, in translation unit with id S-4-885632445599895776-25721, the meta data ID is 885632445599895776 and the application ID is 25721.  (S-4 is an internal code signifying that this is a meta data string and corresponds to the text of a tab).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As I've discussed in a recent &lt;a href="http://joelkallman.blogspot.com/2010/07/where-did-my-saved-interactive-reports.html"&gt;blog post about saved Interactive Reports&lt;/a&gt;, I explained how the internal meta data IDs "shift" or are recalculated when importing an application to a new ID.  And this has presented problems for those customers who make use of the translation facilities of Application Express.  Because the meta data IDs are a part of the XLIFF translation unit IDs, when those IDs change, the existing XLIFF files for the original application cannot be used against a new version of the application imported elsewhere as a new application ID.  What a dead end!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have authored an APEX application which helps customers overcome this problem.  You can run the hosted version of the &lt;a href="http://apex.oracle.com/pls/apex/f?p=46992:1"&gt;XLIFF Transformation application&lt;/a&gt; which is running in my workspace on apex.oracle.com, or you can &lt;a href="http://apex.oracle.com/pls/apex/wwv_flow_file_mgr.get_file?p_security_group_id=586597513792283195&amp;amp;p_fname=xliff_transformation_installer.sql&amp;amp;p_inline=NO"&gt;download a copy&lt;/a&gt; of it and run it on your own APEX 4.0 or later instance.  You need to provide 3 things when running this application:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;The original XLIFF file&lt;/li&gt;&lt;li&gt;The application ID of the new application&lt;/li&gt;&lt;li&gt;The offset value between the two applications&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To compute #3, I'll refer you to this &lt;a href="http://joelkallman.blogspot.com/2010/07/where-did-my-saved-interactive-reports.html"&gt;same blog post&lt;/a&gt; where I give a couple examples how to determine the offset value.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The logic is really quite simple.  After importing the application and installing the supporting objects, only 3 objects will be created - a table named XLIFF_FILES, a trigger on this table, and a small PL/SQL package named XLIFF_TRANSFORM.  The PL/SQL package parses the XML file and uses some XDB APIs to replace certain elements of the XML file.  By exploiting the native functionality of the database, this was really quite easy to write.  For anyone who says the Oracle database is only good for "persisting data", I say smoke this!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This isn't my ideal solution.  In a future release of Application Express, I'd like to make it as simple as choosing to include your translations in your application export file, and they move around with you.  As the metadata gets transformed on a new import, so do the translations.  But until then, this solution can be used.&lt;/div&gt;&lt;/file&gt;&lt;/xliff&gt;&lt;/texarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-8930181577455669940?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/8930181577455669940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=8930181577455669940' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8930181577455669940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8930181577455669940'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/07/moving-your-xliff-files.html' title='Moving your XLIFF Files'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-396351636212982277</id><published>2010-07-20T16:27:00.022-04:00</published><updated>2011-10-26T23:27:00.223-04:00</updated><title type='text'>Where Did My Saved Interactive Reports Go?</title><content type='html'>A problem I've seen reported numerous times from customers is that users' saved (or customized) interactive reports are missing after they import a new version of their application.  This is a problem we've known about for a while with no adequate remedy.  However, given the introduction of the &lt;a href="http://joelkallman.blogspot.com/2010/07/apexapplicationinstall.html"&gt;APEX_APPLICATION_INSTALL API&lt;/a&gt; in Application Express 4.0, I can offer a solution.  Granted, it's not an ideal answer but it's certainly a feasible and supported solution.  Firstly, some explanations are in order.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When an APEX application is imported into a workspace, the very first thing that's done is the existing version of the application is completely deleted.  All of the meta data associated with the application is deleted - the definition of the pages, the reports on the pages, the templates, the buttons, the branches, the shared components, everything - it's all deleted.  Once this is complete, then the application meta data of the APEX application being imported is then inserted.  This whole process is atomic - so if an error occurs, the transaction is rolled back and the net effect is no change.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the case of saved Interactive Reports, it's a little bit different.  Imagine you have a production instance running application 645 - you have numerous users who have saved many Customized Interactive Reports.  Upon import of a new version of the application, all meta data associated with application 645 is first deleted &lt;b&gt;except&lt;/b&gt; the Customized Interactive Reports.  In essence, these are left "dangling" until the new application 645 is installed.  Once the application import is complete, then the meta data of the Customized Interactive Reports will reference real interactive report definitions again.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But there's a catch.  If the application ID changes upon import, then this results in totally new meta data IDs being generated.   (This is done in an attempt to prevent collisions of meta data, so you can freely export your application and give to anyone in the world to use on their own APEX instance).  A meta data offset number is randomly generated and added to all of the existing IDs.  This is done uniformly across all of the application meta data (this is important, and you'll see why shortly).  Since the IDs of all of the application meta data have changed, all of your users' customized reports in the previous version of the application are forever left orphaned until they're cleaned up by an internal APEX batch process.  Yikes!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let's look at an example.  On apex.oracle.com, I created a simple application with an Interactive Report on the EMP table.  I defined this application as application 70000.  I then exported this application and imported it back as application 70001.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using SQL Commands and the APEX Data Dictionary views, I ran the following queries:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;select tab_label, tab_id&lt;br /&gt;from APEX_APPLICATION_TABS&lt;br /&gt;where application_id = 70000&lt;br /&gt;&lt;br /&gt;tab_label: Emp&lt;br /&gt;tab_id: 1573281607527253166&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;select tab_label, tab_id&lt;br /&gt;from APEX_APPLICATION_TABS&lt;br /&gt;where application_id = 70001&lt;br /&gt;&lt;br /&gt;tab_label: Emp&lt;br /&gt;tab_id: 3146580610985521585&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And the difference between the two IDs is 3146580610985521585 - 1573281607527253166 = 1573299003458268419&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let's do this again, but this time, for the APEX data dictionary view for page templates:&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;select template_id from APEX_APPLICATION_TEMP_PAGE where template_name = 'Login' and application_id = 70000&lt;br /&gt;&lt;br /&gt;template_id:  1573270610302252883&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;select template_id from APEX_APPLICATION_TEMP_PAGE where template_name = 'Login' and application_id = 70001&lt;br /&gt;&lt;br /&gt;template_id:  3146569613760521302&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If we once again compute the differences between these two IDs, we get:  3146569613760521302 - 1573270610302252883 = 1573299003458268419&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This happens to be &lt;b&gt;exactly &lt;/b&gt;the difference between the IDs of &lt;b&gt;all &lt;/b&gt;of the application meta data, with the exception of the application and page IDs.  All of the meta data is consistently "pushed" or offset to a new value.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;How is this relevant to missing saved Interactive Reports?  Simple.  Since we're able to compute the offset which was used between the two applications, if we had a way to ensure that the same offset is used every time upon application import, then there would be no issue with the old saved Interactive Report IDs matching with the newly imported meta data.  They would be married again.  And how is this done?  In Application Express 4.0, there is a new API named &lt;a href="http://joelkallman.blogspot.com/2010/07/apexapplicationinstall.html"&gt;APEX_APPLICATION_INSTALL&lt;/a&gt; which enables you to control this offset value.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To ensure that I didn't lose the saved Interactive Reports on subsequent imports of application 70000 to application 70001, I included the computed offset before importing this application via SQL*Plus:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;begin    &lt;br /&gt;    apex_application_install.set_application_id( p_application_id =&gt; 70001 );&lt;br /&gt;    apex_application_install.set_offset( p_offset =&gt; 1573299003458268419 );&lt;br /&gt;    --&lt;br /&gt;    -- set the alias so it doesn't collide with the alias from app 70000&lt;br /&gt;    --&lt;br /&gt;    apex_application_install.set_application_alias( &lt;br /&gt;        'F' || apex_application.get_application_id );  &lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@f70000.sql&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's all there is to it.  Note that I didn't have to call apex_application_install.set_workspace_id above, because application 70000 and 70001 are in the same workspace where I performed this test.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As I stated earlier, this isn't the most elegant solution on the planet and most people don't want or need to know about meta data IDs or offsets or any of this complexity.  But for those experienced users who are stuck with this problem of losing saved interactive reports when migrating from one application ID to another or across workspaces or instances, this is a supported and feasible solution.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-396351636212982277?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/396351636212982277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=396351636212982277' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/396351636212982277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/396351636212982277'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/07/where-did-my-saved-interactive-reports.html' title='Where Did My Saved Interactive Reports Go?'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-6792177617478914157</id><published>2010-07-20T07:55:00.019-04:00</published><updated>2011-10-26T23:28:19.257-04:00</updated><title type='text'>APEX_APPLICATION_INSTALL</title><content type='html'>&lt;div&gt;&lt;h1&gt;Overview&lt;/h1&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://apex.oracle.com/"&gt;Oracle Application Express&lt;/a&gt; provides two ways to import an application into an Application Express instance:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Upload and installation of an application export file via the Web interface of Application Express.&lt;/li&gt;&lt;li&gt;Execution of the application export file as a SQL script, typically in the command-line utility &lt;a href="http://en.wikipedia.org/wiki/SQL*Plus"&gt;SQL*Plus&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using the file upload capability of the Web interface of Application Express, developers can import an application with a different application ID, different workspace ID and different parsing schema.  But when importing an application via a command-line tool like SQL*Plus, none of these attributes (application ID, workspace ID, parsing schema) can be changed without directly modifying the application export file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As more and more Application Express customers create applications which are meant to be deployed via command-line utilities or via a non-Web-based installer, they are faced with this challenge of how to import their application into an arbitrary workspace on any APEX instance.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another common scenario is in training classes, to install an application into 50 different workspaces, all using the same application export file.  Today, customers work around this by adding their own global variables to an application export file (never recommended and certainly not supported) and then varying the values of these global variables at installation time.  However, this manual modification of the application export file (usually done with a post-export &lt;a href="http://en.wikipedia.org/wiki/Sed"&gt;sed&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Awk"&gt;awk&lt;/a&gt; script) shouldn't be necessary - and again, not supported.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In &lt;a href="http://www.oracle.com/technology/products/database/application_express/html/4.0_new_features.html"&gt;Oracle Application Express 4.0&lt;/a&gt;, there is a new API available named APEX_APPLICATION_INSTALL.  This PL/SQL API provides a number of methods to set application attributes during the Application Express application installation process.  All export files in Application Express 4.0 contain references to the values set by the APEX_APPLICATION_INSTALL API.  However, the methods in this API will only be used to override the default application installation behavior.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h1&gt;APEX_APPLICATION_INSTALL Summary&lt;/h1&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Workspace&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Used to set and get the workspace ID for the application to be imported.  This number can be determined by querying the view APEX_WORKSPACES.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;procedure set_workspace_id( p_workspace_id in number );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;function get_workspace_id return number;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Application ID&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Used to set and get the application ID for the application to be imported.  The application ID should either not exist in the instance, or if it does exist in the instance, it must be in the workspace where the application will be imported into.  This number must be a positive integer and must not be from the reserved range of Application Express application IDs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;procedure set_application_id( p_application_id in number );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;function get_application_id return number;   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Generates an available application ID on the instance and sets the application ID in APEX_APPLICATION_INSTALL.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;procedure generate_application_id;   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Offset&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Used to set the offset value during application import.  This value is used to ensure that the metadata for the Application Express application definition does not collide with other metadata on the instance.  For a new application installation, it's almost always sufficient to call generate_offset to have Application Express generate this offset value for you.  This number must be a positive integer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;procedure set_offset( p_offset in number );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;function get_offset return number;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;procedure generate_offset;    &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Schema&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Used to set the parsing schema ("owner") of the Application Express application.  The database user of this schema must already exist, and this schema name must already be mapped to the workspace which will be used to import the application.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;procedure set_schema( p_schema in varchar2 );     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;function get_schema return varchar2;        &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3&gt;Name&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sets the application name of the application to be imported.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;procedure set_application_name( p_application_name in varchar2 );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;function get_application_name return varchar2;       &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3&gt;Alias&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sets the application alias of the application to be imported.  This will only be used if the application to be imported has an alias specified.  An application alias must be unique within a workspace, and it's recommended to be unique within an instance.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;procedure set_application_alias( p_application_alias in varchar2 );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;function get_application_alias return varchar2;        &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3&gt;Image Prefix&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sets the image prefix of the application to be imported.  The default can usually be used, as most Application Express instances use the default image prefix of /i/.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;procedure set_image_prefix( p_image_prefix in varchar2 );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;function get_image_prefix return varchar2;      &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3&gt;Proxy&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sets the proxy server attributes of the application to be imported.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;procedure set_proxy( p_proxy in varchar2 );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;function get_proxy return varchar2;               &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;         &lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3&gt;Clear&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Clears all values currently maintained in the APEX_APPLICATION_INSTALL package.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size:small;"&gt;procedure clear_all;       &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h1&gt;Examples&lt;/h1&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using the workspace FRED_DEV on the development instance, you generate an application export of application 645 and save it as file f645.sql.  All examples below assume you are connected to SQL*Plus.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To import this application back into the FRED_DEV workspace on the same development instance using the same application ID:&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;@f645.sql&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To import this application back into the FRED_DEV workspace on the same development instance, but using application ID 702:&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;begin&lt;br /&gt;  apex_application_install.set_application_id( 702);&lt;br /&gt;  apex_application_install.generate_offset;&lt;br /&gt;  apex_application_install.set_application_alias( 'F' || apex_application_install.get_application_id );&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;@645.sql&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To import this application back into the FRED_DEV workspace on the same development instance, but using an available application ID generated by Application Express:&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;begin&lt;br /&gt;  apex_application_install.generate_application_id;&lt;br /&gt;  apex_application_install.generate_offset;&lt;br /&gt;  apex_application_install.set_application_alias( 'F' || apex_application_install.get_application_id );&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;@f645.sql&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To import this application into the FRED_PROD workspace on the production instance, using schema FREDDY, and the workspace ID of FRED_DEV and FRED_PROD are different:&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;declare&lt;br /&gt;    l_workspace_id number;&lt;br /&gt;begin&lt;br /&gt;    select workspace_id into l_workspace_id&lt;br /&gt;      from apex_workspaces&lt;br /&gt;     where workspace = 'FRED_PROD';&lt;br /&gt;    --&lt;br /&gt;    apex_application_install.set_workspace_id( l_workspace_id );&lt;br /&gt;    apex_application_install.generate_offset;&lt;br /&gt;    apex_application_install.set_schema( 'FREDDY' );&lt;br /&gt;    apex_application_install.set_application_alias( 'FREDPROD_APP' );&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;@f645.sql&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To import this application into the Training instance for 3 different workspaces (each workspace with their own schema):&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;declare&lt;br /&gt;    l_workspace_id number;&lt;br /&gt;begin&lt;br /&gt;    select workspace_id into l_workspace_id&lt;br /&gt;      from apex_workspaces&lt;br /&gt;     where workspace = 'TRAINING1';&lt;br /&gt;    --&lt;br /&gt;    apex_application_install.set_workspace_id( l_workspace_id );&lt;br /&gt;    apex_application_install.generate_application_id;&lt;br /&gt;    apex_application_install.generate_offset;&lt;br /&gt;    apex_application_install.set_schema( 'STUDENT1' );&lt;br /&gt;    apex_application_install.set_application_alias( 'F' || apex_application_install.get_application_id );&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;@f645.sql&lt;br /&gt;&lt;br /&gt;declare&lt;br /&gt;    l_workspace_id number;&lt;br /&gt;begin&lt;br /&gt;    select workspace_id into l_workspace_id&lt;br /&gt;      from apex_workspaces&lt;br /&gt;     where workspace = 'TRAINING2';&lt;br /&gt;    --&lt;br /&gt;    apex_application_install.set_workspace_id( l_workspace_id );&lt;br /&gt;    apex_application_install.generate_application_id;&lt;br /&gt;    apex_application_install.generate_offset;&lt;br /&gt;    apex_application_install.set_schema( 'STUDENT2' );&lt;br /&gt;    apex_application_install.set_application_alias( 'F' || apex_application_install.get_application_id );&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;@f645.sql&lt;br /&gt;&lt;br /&gt;declare&lt;br /&gt;    l_workspace_id number;&lt;br /&gt;begin&lt;br /&gt;    select workspace_id into l_workspace_id&lt;br /&gt;      from apex_workspaces&lt;br /&gt;     where workspace = 'TRAINING3';&lt;br /&gt;    --&lt;br /&gt;    apex_application_install.set_workspace_id( l_workspace_id );&lt;br /&gt;    apex_application_install.generate_application_id;&lt;br /&gt;    apex_application_install.generate_offset;&lt;br /&gt;    apex_application_install.set_schema( 'STUDENT3' );&lt;br /&gt;    apex_application_install.set_application_alias( 'F' || apex_application_install.get_application_id );&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;@f645.sql&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now a final word of caution - with great power comes great responsibility.  You should almost never set the offset value yourself unless you absolutely know what you're doing.  One of the primary benefits of letting Application Express generate the meta data offset value for you is you avoid the possibility of any "collisions" with the meta data of any other application on any other APEX instance on the planet.  If you have no known reason to manually set the offset value, then simply let Application Express set it for you.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In summary, the APEX_APPLICATION_INSTALL API in Application Express 4.0 now enables you to overcome a limitation in all previous versions of Application Express - namely, to take an arbitrary application export file and import it into any workspace on any arbitrary Application Express instance using SQL*Plus or any other command-line tool.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-6792177617478914157?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/6792177617478914157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=6792177617478914157' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6792177617478914157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6792177617478914157'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/07/apexapplicationinstall.html' title='APEX_APPLICATION_INSTALL'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-4525353105943240989</id><published>2010-07-02T15:41:00.005-04:00</published><updated>2010-07-02T15:48:31.609-04:00</updated><title type='text'>Welcome Mike Hichwa to the Blogosphere!</title><content type='html'>My manager since 1999, &lt;a href="http://michaelhichwa.blogspot.com/"&gt;Mike Hichwa&lt;/a&gt;, has finally decided to join the blogosphere.  Mike is the visionary and driving force behind &lt;a href="http://apex.oracle.com/"&gt;Oracle Application Express&lt;/a&gt; and has been since he authored the very first line of APEX (then called "Flows") in 1999.  Mike is the Vice President of Database Tools and is responsible for Application Express, SQL Developer, .NET tools, Java in the database, and others.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-4525353105943240989?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/4525353105943240989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=4525353105943240989' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4525353105943240989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4525353105943240989'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/07/welcome-mike-hichwa-to-blogosphere.html' title='Welcome Mike Hichwa to the Blogosphere!'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-8487503895978073316</id><published>2010-06-30T07:29:00.004-04:00</published><updated>2010-06-30T07:54:06.684-04:00</updated><title type='text'>Language Preference of the Application Development Environment in APEX 4.0</title><content type='html'>&lt;div&gt;A customer filed a Service Request with &lt;a href="http://support.oracle.com/"&gt;Oracle Support&lt;/a&gt;, asking the following:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-left: 40px;"&gt;&lt;i&gt;In Apex 4, Irrespective of the Client OS / Locale / Browser Language settings, the Language picked up the interface shows as  “ Language: en “ . Where as from the same browser/client if I login into Apex.3.2.1, it shows the correct language as  "DE" , "TH", "FR", etc.,&lt;/i&gt;&lt;/div&gt;&lt;div style="margin-left: 40px;"&gt;&lt;i&gt;&lt;br /&gt;Has anybody seen this issue? Am I missing something?&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;This is expected behavior.  In Application Express 4.0, the development environment uses the new "Session" language derivation, bringing it in line with modern Web applications which do not use the browser language as the primary language preference.  This new language derivation type is documented briefly &lt;a href="http://download.oracle.com/docs/cd/E17556_01/doc/user.40/e15517/global.htm#CHDFFJEJ"&gt;here&lt;/a&gt; and additionally in the item-level help.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you go to the Login page of &lt;a href="http://apex.oracle.com/pls/apex/f?p=4550:1"&gt;apex.oracle.com&lt;/a&gt;, you’ll see the language bar at the bottom.  This language list is determined by the translated versions of Application Express which are installed in the instance.   You can change your language preference from this language bar or within Application Express too.  The language preference is "remembered" via a persistent cookie.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-8487503895978073316?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/8487503895978073316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=8487503895978073316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8487503895978073316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8487503895978073316'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/06/language-preference-of-application.html' title='Language Preference of the Application Development Environment in APEX 4.0'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-4826012198308423423</id><published>2010-06-22T15:59:00.010-04:00</published><updated>2010-06-23T07:52:44.459-04:00</updated><title type='text'>Oracle Application Express 4.0 is released</title><content type='html'>Oracle Application Express 4.0 is now available for download from the Oracle Technology Network &lt;a href="http://www.oracle.com/technology/products/database/application_express/download.html"&gt;here&lt;/a&gt;.  What began in 2008 has culminated in the most ambitious release of Oracle Application Express since the very first version of Oracle HTML DB in 2004.  Major enhancements include:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Websheets&lt;/li&gt;&lt;li&gt;Dynamic Actions&lt;/li&gt;&lt;li&gt;Plug-Ins&lt;/li&gt;&lt;li&gt;Team Development&lt;/li&gt;&lt;li&gt;Improved Charts, including Maps and Gantt Charts&lt;/li&gt;&lt;li&gt;Support for RESTful Web Services&lt;/li&gt;&lt;li&gt;Enhanced Interactive Reports&lt;/li&gt;&lt;li&gt;Dramatically improved themes/templates&lt;/li&gt;&lt;li&gt;Tabular form validations&lt;/li&gt;&lt;li&gt;Dynamic calendars&lt;/li&gt;&lt;li&gt;and many more...&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can read about the new features of Application Express 4.0 &lt;a href="http://www.oracle.com/technology/products/database/application_express/html/4.0_new_features.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you wish to kick the tires of Oracle Application Express 4.0, feel free to sign up for a free workspace at &lt;a href="http://apex.oracle.com/"&gt;http://apex.oracle.com&lt;/a&gt;.  We're currently averaging around 600 &lt;b&gt;new&lt;/b&gt; workspaces per week on apex.oracle.com, so the interest in the APEX Community is growing every day.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Our thanks go out to the thousands of customers who participated in the three different Early Adopter releases since December 2009.  Your feedback, bug reports and suggestions have all made this a far better release in terms of quality and functionality.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-4826012198308423423?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/4826012198308423423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=4826012198308423423' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4826012198308423423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4826012198308423423'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/06/oracle-application-express-40-is.html' title='Oracle Application Express 4.0 is released'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-925541055961195624</id><published>2010-06-18T23:05:00.000-04:00</published><updated>2010-06-18T23:05:18.016-04:00</updated><title type='text'>apex.oracle.com upgraded to APEX 4.0, version 4.0.0.00.46</title><content type='html'>Tonight, I patched apex.oracle.com to version 4.0.0.00.46.  This is our proposed final release candidate of the software.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All translated versions have been installed too, which includes German, Spanish, French, Italian, Japanese, Korean, Brazilian Portuguese, Simplified Chinese and Traditional Chinese.  Unlike previous releases of Application Express, the language for the Application Builder is no longer determined by your browser language setting.  You can simply choose your language from the Login page or from within the home page in Application Express (after you login).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It has proven extraordinarily useful to upgrade apex.oracle.com and gather the feedback prior to release.  There were a number of bugs which were uncovered and fixed that would have otherwise been missed.  Thanks to all who reported any issues.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-925541055961195624?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/925541055961195624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=925541055961195624' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/925541055961195624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/925541055961195624'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/06/apexoraclecom-upgraded-to-apex-40.html' title='apex.oracle.com upgraded to APEX 4.0, version 4.0.0.00.46'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-970035284655036074</id><published>2010-06-17T15:32:00.000-04:00</published><updated>2010-06-17T15:32:49.715-04:00</updated><title type='text'>Oracle Application Express and the Corporate IT Architect - Part I</title><content type='html'>A few weeks ago, I attended an event in Columbus, Ohio called "IT Martini Hour 10: Agile of All Trades", sponsored by &lt;a href="http://www.itmartini.com/"&gt;IT Martini&lt;/a&gt;.  It's a very well organized event, gathering a few hundred people from the local IT community.  I also was interested in going because a friend of mine from &lt;a href="http://www.pacejet.com/"&gt;Pacejet&lt;/a&gt; was part of a discussion panel, hosted by &lt;a href="http://aws.amazon.com/"&gt;Amazon Web Services&lt;/a&gt;.  We've had such smashing success with Amazon Web Services in the hosting of &lt;a href="http://tryapexnow.com/"&gt;http://tryapexnow.com&lt;/a&gt;, I just simply wanted to meet them and thank them.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;During this event, I ran into a gentleman I worked with 20 years ago, where he and I were both in the same product development organization.  This gentleman, "Mr. G", was a smart guy 20 years ago and is a smart guy today.  Today, "Mr. G" works for a large financial institution where he is an architect for corporate IT.  After glancing at my name tag which said "Oracle", he asked what I was doing and I gave him the 20-second story of Oracle Application Express.  I even went so far as to say that his own company is running over 100 internal applications, all built with Oracle Application Express.  I was expecting a positive reaction.  That's not what I got.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In a rather abrupt and candid response, "Mr. G" said that he learned of Application Express just a couple weeks ago.  He said it was stupid.  It's RAD and RAD is bad.  It's for "quick and dirty applications that don't scale".  When I told him what organization was a primary user of APEX in his company, he referred to them as "the business users", and of course they'd use APEX.  He wasn't surprised.  They tend to use one of everything, whether or not it's the IT standard.  He went on - a problem with APEX, like other frameworks, it's that it's a black box, and when there's a problem with the black box, you're stuck.  Of course, I asked him if he doesn't use any framework, since presumably all frameworks are bad - but of course they do.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another problem he had - he said I'd be surprised if I looked at what crappy systems the "business users" run these systems on.  Then, when they fail, it becomes an IT problem.  I had to point out that this wasn't a criticism of Application Express but a flaw within their organization. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I asked him what alternatives are provided by "corporate IT".  He said they have a bundle of software, some of it open-source, that is the official development platform distributed amongst the various businesses, which corporate IT can support.  When I asked him if this can be used by the "business users", of course he said no.  To which I concluded that he'd rather have the business users not solve their problems.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This went on for a few more minutes until the beer and testosterone kicked in.  I finally blurted out how he was arriving at conclusions based upon no knowledge or experience.  Surprisingly, "Mr. G." agreed.  I offered to come to his place of business and give him a personal demonstration, being as honest and forthcoming as I can be about the positioning of Application Express and its strengths and weaknesses.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When the dust of Oracle Application Express 4.0 settles, I'll be visiting him.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-970035284655036074?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/970035284655036074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=970035284655036074' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/970035284655036074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/970035284655036074'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/05/oracle-application-express-and.html' title='Oracle Application Express and the Corporate IT Architect - Part I'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5986840043631770133</id><published>2010-06-07T22:32:00.008-04:00</published><updated>2010-06-07T22:51:46.449-04:00</updated><title type='text'>Oracle Application Express 3.2: The Essentials and More</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/gp/product/1847194524?ie=UTF8&amp;amp;tag=joelkallman-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1847194524"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 300px; height: 300px;" src="http://3.bp.blogspot.com/_Xzek4R5SEds/TA2vZTluPaI/AAAAAAAAAq0/loRGQWARJqU/s320/apex_essentials_and_more.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5480229170869845410" /&gt;&lt;/a&gt;&lt;br /&gt;Last week, &lt;a href="http://www.packtpub.com/"&gt;Packt Publishing&lt;/a&gt; shipped the book &lt;a href="http://www.amazon.com/gp/product/1847194524?ie=UTF8&amp;amp;tag=joelkallman-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1847194524"&gt;Oracle Application Express 3.2: The Essentials and More&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=joelkallman-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1847194524" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;.  This book is authored by my friend &lt;a href="http://forums.oracle.com/forums/profile.jspa?userID=229120"&gt;Arie Geller&lt;/a&gt; and Matthew Lyon.  Many people have been helped by Arie on the &lt;a href="forums.oracle.com/forums/forum.jspa?forumID=137"&gt;Application Express discussion forum on OTN&lt;/a&gt; for years, and I can easily say that Arie is one of the foremost experts in the world on creating multi-lingual and globalized applications in &lt;a href="http://apex.oracle.com/"&gt;Oracle Application Express&lt;/a&gt;.  I've even learned a few things from Arie about properly developing applications which support RTL (right-to-left) languages like Hebrew and Arabic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5986840043631770133?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5986840043631770133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5986840043631770133' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5986840043631770133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5986840043631770133'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/06/oracle-application-express-32.html' title='Oracle Application Express 3.2: The Essentials and More'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Xzek4R5SEds/TA2vZTluPaI/AAAAAAAAAq0/loRGQWARJqU/s72-c/apex_essentials_and_more.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-1412968337658574939</id><published>2010-06-04T20:50:00.009-04:00</published><updated>2010-06-05T03:53:55.239-04:00</updated><title type='text'>apex.oracle.com upgraded to Oracle Application Express 4.0</title><content type='html'>Oracle Application Express at &lt;a href="http://apex.oracle.com"&gt;http://apex.oracle.com&lt;/a&gt; has been upgraded to a pre-production version of Oracle Application Express 4.0.  There's nothing like upgrading an instance of 8,000 workspaces and 31,000 applications to ensure that the upgrade works perfectly and what used to work in Application Express 3.2 continues to run flawlessly&lt;br /&gt;&lt;br /&gt;As most users in the APEX Community have come to realize, this is one of  the final milestones in our development cycle before release.  So we're getting close.  You can read about what's new in Application Express 4.0 &lt;a href="http://www.oracle.com/technology/products/database/application_express/html/4.0_new_features.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The participation of the thousands of people in the Early Adopter program since December has been overwhelming.  We are grateful for all of the work and feedback and suggestions and bugs reported by everyone.  The APEX Community is alive and well...and growing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-1412968337658574939?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/1412968337658574939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=1412968337658574939' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1412968337658574939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1412968337658574939'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/06/apexoraclecom-upgraded-to-oracle.html' title='apex.oracle.com upgraded to Oracle Application Express 4.0'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-4920975997673330630</id><published>2010-05-10T13:30:00.003-04:00</published><updated>2010-05-10T13:32:44.174-04:00</updated><title type='text'>Application Express 4.0 Early Adopter Phase 3 is now available</title><content type='html'>The third (and hopefully final phase) of Oracle Application Express 4.0 Early Adopter is now available. A new instance with the latest build of Application Express 4.0 is now available on &lt;a href="http://tryapexnow.com"&gt;http://tryapexnow.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you had used the second Application Express 4.0 Early Adopter  instance, your workspace and schema have not been migrated to this  instance.  You will need to sign up for a workspace but you shouldn't  have to take the survey again.  The original Application Express 4.0  Early Adopter 2 instance is available at &lt;a href="http://184.73.244.154/apex"&gt;http://184.73.244.154/apex&lt;/a&gt;, and it  will be available for the next couple of weeks.&lt;br /&gt;&lt;br /&gt;Thanks to  everyone who has participated and provided feedback, as the feedback and  suggestions have been invaluable as always.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-4920975997673330630?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/4920975997673330630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=4920975997673330630' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4920975997673330630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4920975997673330630'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/05/application-express-40-early-adopter.html' title='Application Express 4.0 Early Adopter Phase 3 is now available'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-431701213611126211</id><published>2010-04-06T09:12:00.003-04:00</published><updated>2010-04-06T09:24:24.349-04:00</updated><title type='text'>Oracle Learning Library</title><content type='html'>Marcie Young, from Curriculum Development, has just released the &lt;a href="http://otn.oracle.com/obe"&gt;Oracle Learning Library&lt;/a&gt;.  This is an application which she developed on &lt;a href="http://apex.oracle.com/"&gt;apex.oracle.com&lt;/a&gt; and is a directory listing of free online training from Oracle - Oracle By Examples, Tutorials and Demonstrations.  This application lets you search for free training covering numerous product and functional categories.  Product categories include Database, Beehive, Enterprise Linux, Enterprise Manager, Fusion Middleware, JDeveloper and Oracle VM.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xzek4R5SEds/S7s1UKQrSyI/AAAAAAAAAqI/300mNQY5BjA/s1600/learning_library.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 187px; border-style: inset; border-width: 3px; border-color: #ff0000;" src="http://1.bp.blogspot.com/_Xzek4R5SEds/S7s1UKQrSyI/AAAAAAAAAqI/300mNQY5BjA/s320/learning_library.png" alt="" id="BLOGGER_PHOTO_ID_5457013993957444386" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-431701213611126211?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/431701213611126211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=431701213611126211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/431701213611126211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/431701213611126211'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/04/oracle-learning-library.html' title='Oracle Learning Library'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Xzek4R5SEds/S7s1UKQrSyI/AAAAAAAAAqI/300mNQY5BjA/s72-c/learning_library.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-7692001492032961513</id><published>2010-03-30T08:50:00.009-04:00</published><updated>2010-03-30T09:03:31.140-04:00</updated><title type='text'>Memorials for Scott Spadafore</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xzek4R5SEds/S7H0Il1QYNI/AAAAAAAAAqA/U9PLlIH359E/s1600/scott2_small.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 225px; height: 300px;" src="http://2.bp.blogspot.com/_Xzek4R5SEds/S7H0Il1QYNI/AAAAAAAAAqA/U9PLlIH359E/s320/scott2_small.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5454409052153995474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;There will be two memorials for our dear friend, Scott Spadafore:&lt;p style="margin-left: 40px;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Saturday, April 10, 2010 at 2:00P PDT&lt;/span&gt;&lt;br /&gt;Clovis Masonic Lodge&lt;br /&gt;&lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=375+5th+Street+Clovis,+CA+93612&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=55.279921,114.169922&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=375+5th+St,+Clovis,+Fresno,+California+93612&amp;amp;t=h&amp;amp;z=17&amp;amp;iwloc=A"&gt;375 5th Street (at DeWitt)&lt;br /&gt;Clovis, CA  93612&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;+1.559.299.4992&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;and&lt;p style="margin-left: 40px;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Saturday, May 1, 2010 at 2:00P PDT&lt;/span&gt;&lt;br /&gt;Santa Cruz Masonic Lodge&lt;br /&gt;&lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=828+N.+Branciforte+Avenue,+Santa+Cruz,+CA+95062&amp;amp;sll=36.824185,-119.704702&amp;amp;sspn=0.006905,0.013937&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=828+N+Branciforte+Ave,+Santa+Cruz,+California+95062&amp;amp;ll=36.980212,-122.013892&amp;amp;spn=0.006891,0.013937&amp;amp;t=h&amp;amp;z=17"&gt;828 N. Branciforte Avenue&lt;br /&gt;Santa Cruz, CA  95062&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;+1.831.423.1530&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;In lieu of flowers, donations may be made to a college fund for Scott’s daughters, Blaire and Keely.  Checks should be payable to:&lt;p style="margin-left: 40px;"&gt;&lt;br /&gt;SCOTT SPADAFORE MEMORIAL FUND&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;and donations can be sent to:&lt;p style="margin-left: 40px;"&gt;&lt;br /&gt;SSMF&lt;br /&gt;PMB#3&lt;br /&gt;1187 N. Willow Avenue, #103&lt;br /&gt;Clovis, CA 93612&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-7692001492032961513?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/7692001492032961513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=7692001492032961513' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7692001492032961513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7692001492032961513'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/03/memorials-for-scott-spadafore.html' title='Memorials for Scott Spadafore'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xzek4R5SEds/S7H0Il1QYNI/AAAAAAAAAqA/U9PLlIH359E/s72-c/scott2_small.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-7078936277886965489</id><published>2010-03-22T10:29:00.003-04:00</published><updated>2010-03-22T10:45:55.161-04:00</updated><title type='text'>Scott Spadafore</title><content type='html'>I am quite saddened to say that our friend, team mate and long time contributor to Oracle Application Express, Scott Spadafore, died last night of a heart attack.&lt;br /&gt;&lt;br /&gt;Scott has made extraordinary contributions to Oracle Application Express since he joined our team in 2001.  Scott also worked tirelessly for many years on the Application Express discussion forum on OTN, where he helped (literally) thousands of customers to become successful with Application Express.  His patience and precision were to be admired.&lt;br /&gt;&lt;br /&gt;I ask that you pray for Scott's wife, Gail, and their two daughters, at this difficult time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-7078936277886965489?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/7078936277886965489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=7078936277886965489' title='53 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7078936277886965489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7078936277886965489'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/03/scott-spadafore.html' title='Scott Spadafore'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>53</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-3898117195644824576</id><published>2010-02-26T16:21:00.004-05:00</published><updated>2010-02-26T16:45:26.759-05:00</updated><title type='text'>Application Express 4.0 Early Adopter Phase II is available</title><content type='html'>The second phase of the Application Express 4.0 Early Adopter is now available.  A new instance with the latest build of Application Express 4.0 is now available on &lt;a href="http://tryapexnow.com"&gt;http://tryapexnow.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;This database was created with database character set AL32UTF8 (we're still a little confused by the Amazon Machine Images from Oracle aren't already AL32UTF8.&lt;/li&gt;&lt;li&gt;The Websheets feature is now available.  The security of Websheet applications still needs to be refined, but the functionality and ease of creation of these types of applications is amazing.&lt;/li&gt;&lt;li&gt;The new tree region makes its debut.&lt;/li&gt;&lt;li&gt;Collections now support NUMBER and DATE&lt;/li&gt;&lt;li&gt;apex_collection.create_collection_from_query_b and apex_collection.create_collection_from_queryb2 support bind variables and row limits&lt;/li&gt;&lt;li&gt;Debugging and logging has been completely rewritten - no longer is debug output emitted within the page, but it's collected and can be viewed later (and also queried via views).&lt;/li&gt;&lt;li&gt;You won't be able to see this, but the tablespaces / data files of provisioned workspaces will now autoextend &lt;/li&gt;&lt;li&gt;There have been many improvements in the Plug-In infrastructure, which &lt;a href="http://www.inside-oracle-apex.com/"&gt;Patrick&lt;/a&gt; will surely expand upon.&lt;/li&gt;&lt;li&gt;A Migration Assistant has been created, which lets you upgrade all of the elements of your pre APEX 4.0 application in one place.&lt;/li&gt;&lt;li&gt;Native validations and declarative validations have also been rewritten and improved (again, &lt;a href="http://www.inside-oracle-apex.com/"&gt;Patrick&lt;/a&gt; will expand upon this).&lt;/li&gt;&lt;li&gt;All of the item types have been consolidated (so you no longer see 1,000 different Date Picker types in your item type select list, as well as other item types)&lt;/li&gt;&lt;li&gt;A large number of bugs and usability issues have been corrected, thanks  in a large part to the tremendous amount of feedback we received.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;This isn't an exhaustive list.  The updated list of new features will be available on tryapexnow.com.&lt;br /&gt;&lt;br /&gt;If you had used the first Application Express 4.0 Early Adopter instance, your workspace and schema have not been migrated to this instance.  You will need to sign up for a workspace but you shouldn't have to take the survey again.  The original Application Express 4.0 Early Adopter instance is available at &lt;a href="http://184.73.244.154/apex"&gt;http://184.73.244.154/apex&lt;/a&gt;, and it will be available for the next couple of weeks.&lt;br /&gt;&lt;br /&gt;Thanks to everyone who has participated and provided feedback, as the feedback and suggestions have been invaluable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-3898117195644824576?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/3898117195644824576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=3898117195644824576' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3898117195644824576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3898117195644824576'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/02/application-express-40-early-adopter.html' title='Application Express 4.0 Early Adopter Phase II is available'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-4349617776255337124</id><published>2010-02-24T09:18:00.015-05:00</published><updated>2010-02-25T09:05:37.956-05:00</updated><title type='text'>FamZoo goes live!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xzek4R5SEds/S4aDE4TXDYI/AAAAAAAAApM/QRMr1iY_pqk/s1600-h/famzoo.png"&gt;&lt;img style="float: right; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 231px; height: 320px;" src="http://3.bp.blogspot.com/_Xzek4R5SEds/S4aDE4TXDYI/AAAAAAAAApM/QRMr1iY_pqk/s320/famzoo.png" alt="" id="BLOGGER_PHOTO_ID_5442181319580126594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Nine years ago, when Oracle started down the path of turning &lt;a href="http://apex.oracle.com/"&gt;Application Express&lt;/a&gt; (nee HTML DB) into a real, supported product that was shipped with the Oracle database, we had the good fortune of being mentored and led by &lt;a href="http://www.linkedin.com/in/billdwight"&gt;Bill Dwight&lt;/a&gt;.  Bill was a hands-on Vice President in the Oracle Tools division and he led the development of JDeveloper, Developer, Forms, Designer, and iLearning.  Bill had a lot of experience and success at Oracle, but also he had the right kind of savvy to guide us from a "project" to a product.  He imparted a lot of sound advice that still helps us today.&lt;br /&gt;&lt;br /&gt;Fast forward to today, and &lt;a href="http://blog.famzoo.com/"&gt;Bill Dwight&lt;/a&gt; is the founder and CEO of &lt;a href="http://www.famzoo.com/"&gt;FamZoo, Inc.&lt;/a&gt;  In a nutshell, FamZoo is "a family-friendly web site that helps parents teach their children the practical skills they’ll need to thrive in the real world."  FamZoo the company, and FamZoo the Web site have been under development and in private beta for a few years, but as of January 21, 2010, FamZoo is now open for business to the public.  As you navigate around the &lt;a href="http://www.famzoo.com/"&gt;FamZoo&lt;/a&gt; site, you'll see the tell-tale signature of Application Express in the URL.  There is an extensive &lt;a href="http://bit.ly/aijBY7"&gt;FamZoo tour&lt;/a&gt; also available.&lt;br /&gt;&lt;br /&gt;FamZoo has been an interesting case-study for Oracle Application Express, in that:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;They made the conscious decision to write the customer-facing portions of FamZoo in lovingly hand-crafted HTML / JavaScript / AJAX.  According to Bill, this was important because "our consumer facing UI is very, very custom and particular - a key part of our brand."&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The internal administration and dashboard pages of FamZoo were written using the traditional wizards and declarative APEX infrastructure.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Even with the very custom customer-facing UI, they still capitalize on other benefits of the Application Express framework, including security, session state, page templates, etc.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;With the exception of one local APEX instance for upgrade testing, the development and deployment of FamZoo has been done on commercial, hosted instances of Application Express from two different hosting providers.  Not only was this extraordinarily cost effective, but it let the FamZoo team focus on building their business and their brand, and not have to worry about database and Web site administration, backups, power, etc.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;The user interface of FamZoo is really superb and the overall flow and navigation of the site is elegant.  To develop this kind of site takes a lot of time and effort and careful planning, regardless of the development framework that is chosen.  I'm just happy they chose to go the Application Express route.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-4349617776255337124?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/4349617776255337124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=4349617776255337124' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4349617776255337124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4349617776255337124'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/02/famzoo-goes-live.html' title='FamZoo goes live!'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Xzek4R5SEds/S4aDE4TXDYI/AAAAAAAAApM/QRMr1iY_pqk/s72-c/famzoo.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-2591446949578341166</id><published>2010-02-08T14:20:00.033-05:00</published><updated>2010-02-11T07:41:18.111-05:00</updated><title type='text'>Making apex.oracle.com fast (again)</title><content type='html'>For the latter part of 2009, the performance on &lt;a href="http://apex.oracle.com/"&gt;apex.oracle.com&lt;/a&gt; was lacking at times, to put it kindly. As evidenced by &lt;a href="http://forums.oracle.com/forums/thread.jspa?threadID=940476"&gt;this long-running thread&lt;/a&gt; on the &lt;a href="http://forums.oracle.com/forums/forum.jspa?forumID=137"&gt;APEX discussion forum on OTN&lt;/a&gt;, performance issues started cropping up in August and things only got worse as the year went on. &lt;a href="http://munkyben.wordpress.com/"&gt;Ben Burrell&lt;/a&gt;, a very frequent contributor on the APEX discussion forum said it best with:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"The dedication and patience shown by the contributors to this forum is nothing short of incredible. Oracle should be magnificently proud of the APEX community - and reward it with a decent service."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I wholeheartedly agree! The least Oracle can do for the army of APEX experts who graciously give of their time to help others with Application Express is provide them a usable service. Additionally, for those users of Application Express who sign up for a test account on apex.oracle.com, a first impression is &lt;span style="font-weight: bold;"&gt;everything&lt;/span&gt;. Even if the cause of the issue is not "an APEX problem", per se, it will always have the perception that APEX is slow and cannot scale.&lt;br /&gt;&lt;br /&gt;This has been a learning experience for me, and I'm simply here to report a number of the issues uncovered and the steps we took to remedy them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) &lt;span style="font-weight: bold;"&gt;KeepAlive&lt;/span&gt; - In November 2009, I was monitoring the database listener log files. There were a very large number of incoming connection requests to the database listener - in some instances, on the order of 30 connection requests per second. One of the most expensive actions you can take is to establish a new database session, hence, why session pooling is so commonly used. As it turns out, an administrator had turned off the KeepAlive setting in Oracle HTTP Server.  Every new APEX page view request had to establish a new database session.  For a site that gets millions of page views a day, this is not good.  I had them turn KeepAlive back to On and with a KeepAliveTimeout of 6 seconds. As busy as apex.oracle.com is today, we now only average about one new database session request every 10 to 15 seconds.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) &lt;span style="font-weight: bold;"&gt;robots.txt&lt;/span&gt; - The &lt;a href="http://en.wikipedia.org/wiki/Robots_exclusion_standard"&gt;robots.txt&lt;/a&gt; file is supposed to be used by Web crawlers and search engines, although not all of them seem to observe it. This file enables a Web site administrator to control when Web crawlers are allowed to crawl a site and how frequently. The "window" of time that we permitted Web crawlers was too great - that's the last thing we want is to have some new user of Application Express competing for the same resources with some Web crawler which is hurling requests at our site. So I reduced the open window for Web crawlers: &lt;a href="http://apex.oracle.com/robots.txt"&gt;http://apex.oracle.com/robots.txt&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) &lt;span style="font-weight: bold;"&gt;Number of Database Access Descriptors&lt;/span&gt; - Since the days of the original 'marvel.oracle.com', the Database Access Descriptor used for the site was named 'otn'. Earlier this year, I wanted to have apex.oracle.com support the documented and standard Database Access Descriptor named 'apex', so we added that one to our configuration. Then, with the migration of AskTom to the apex.oracle.com instance, we created a third Database Access Descriptor named 'asktom' (otherwise, we would have broken any bookmarks to Tom's questions and answers).&lt;br /&gt;&lt;br /&gt;The Web server software used by Oracle Global IT on this instance is Oracle Application Server 10.1.2. Unfortunately, Oracle HTTP Server and mod_plsql do not support true connection pooling in this version (see the &lt;a href="http://download.oracle.com/docs/cd/B13789_01/server.101/b12303/optplsql.htm#1020956"&gt;documentation&lt;/a&gt; for the explanation).  Each HTTP Server process would establish and maintain a database connection per DAD - that's three database connections times the number of HTTP Server processes.   There are two Web servers that front-end apex.oracle.com - so 2 Web servers * 3 connections per Oracle HTTP Server process * 200 - 250 HTTP Server processes - and we easily had more than 1,000 database sessions during peak times.  Even if only a handful of these sessions were active at any given time, the memory consumed by all of these sessions was too large.  So large, that the system log was recording messages like "Out of Memory: Killed process 31088 (oracle)" every few minutes.  Not good.&lt;br /&gt;&lt;br /&gt;With the help of &lt;a href="http://krisrice.blogspot.com/"&gt;Kris Rice&lt;/a&gt;, we were able to remove the 'asktom' Database Access Descriptor and replace it with the following rewrite directives in httpd.conf:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    RewriteEngine On&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    RewriteCond   %{THE_REQUEST}         ^.*/pls/asktom.* [NC]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    RewriteRule   ^.*/pls/asktom(.*)$  /pls/apex$1 [NC,QSA,PT]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With this one change, the database server wasn't swapping memory and the OS was not randomly killing processes because it was out of memory.  The next day, &lt;a href="http://tkyte.blogspot.com/"&gt;Tom&lt;/a&gt; even commented how snappy it was.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) &lt;span style="font-weight: bold;"&gt;File System Caching&lt;/span&gt; - The system administrators reviewed the network performance and I/O systems.  They changed the "noac" and "actimeo" parameters so that the system would cache file system parameters, thus reducing the I/O on the system.  Remember that this was a database with over 15,000 tablespaces and datafiles - that's a lot of potential I/O savings.  Don't ask me for any more detail on this one, though - it's beyond my domain of expertise.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5) &lt;span style="font-weight: bold;"&gt;Purge of Stale Workspaces&lt;/span&gt; - There is no built-in workspace purging process in Application Express.  The way the process has worked over the past 3 or 4 year is I personally would run a hand-crafted collection of custom PL/SQL programs which identified the workspaces that have not been touched in the last 45 days, notify the administrators of these workspaces via e-mail that their workspace was going to be purged, let them retain the workspace if they wished, and then after a two-week period - go through and purge the ones which hadn't been retained.&lt;br /&gt;&lt;br /&gt;The problem with this solution is that apex.oracle.com would go through these peaks and valleys - dropping to 7,000 workspaces and then over time, creep up to 17,000 workspaces.  I would manually run the purge process a year later, bring it back down to 8,000 workspaces, and then the process starts all over again.  The system would be fastest after the purge and then slowly degrade over time.&lt;br /&gt;&lt;br /&gt;I rewrote the purge process from scratch, but this time, I designed it to run perpetually (I have to give credit to my manager, Mike Hichwa, for this idea).  The parameters are roughly the same - every night, it wakes up, computes who hasn't used their workspace in the past N days and isn't already on "the list", sends the administrators an e-mail, gives them the chance to retain their workspace, sends a reminder 3 days in advance of the purge, and and then after a total of 10 days, purges the workspace.  Purging the workspace involves dropping the tablespace &amp;amp; data file, dropping the database user corresponding to the workspace schema, and deleting the workspace and all associated meta data.  The great thing is this runs every day - I don't have to kick it off and monitor it, I just get daily e-mails about the status and statistics.&lt;br /&gt;&lt;br /&gt;Since the first workspace was purged by this process on January 18, 2010, this perpetual purge process has been used to remove 5,998 workspaces and 5,860 tablespaces, reclaiming 64,531,415,040 bytes from the file system.  And now apex.oracle.com is on auto-pilot.&lt;br /&gt;&lt;br /&gt;My manager, Mike Hichwa, also suggested I simply fold this feature into Application Express 4.0 - so Application Express can become a self-maintaining system.  I'm not convinced this feature would be used by that many customers outside of apex.oracle.com.  I tend to believe DBA's and our customers would rarely want to automatically drop data.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6) &lt;span style="font-weight: bold;"&gt;Memory&lt;/span&gt; - This past Saturday, February 6, 2010, the memory on apex.oracle.com was upgraded from 16 GB to 32 GB.  Since then, the machine is really very, very fast.  I've monitored the system load and it is consistently running at about 50% of maximum capacity, even during peak times.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Going forward, I am going to request that we upgrade the database to version 11.2.0.1.  Additionally, I am going to request an upgrade to Oracle HTTP Server which supports &lt;a href="http://joelkallman.blogspot.com/2008/01/oracle-http-server-apache-20-and.html"&gt;true connection pooling&lt;/a&gt; and which should dramatically reduce the number of overall database sessions to the database server, itself.  If the upgrade to Oracle HTTP Server can't be done in a reasonable time frame, then I'm going to try to setup server-side pooling via &lt;a href="http://www.oracle.com/technology/tech/oci/pdf/oracledrcp11g.pdf"&gt;Database Resident Connection Pooling&lt;/a&gt;.  Even though I always advise against multiplexing multiplexed connections, I can't really describe the connection pooling on our version of Oracle HTTP Server today as "multiplexed."&lt;br /&gt;&lt;br /&gt;If I were in charge of this site, I would have done these upgrades yesterday.  But probably like the company you're at, our IT organization that actually runs this site has their software levels and it takes time to uptake new versions and roll it out.  I'm not complaining, as I understand and appreciate this when you have to manage hundreds of databases and Web applications, as they do.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Contrary to some assertions, the performance of apex.oracle.com was of great concern to us and to me personally.  However, you cannot fix a problem until you have diagnosed the actual cause of the issue.  And unfortunately, that takes time.  Additionally, some of these steps took a great deal of time to actually implement and test before rolling out on apex.oracle.com.  As much as I would have liked to flip the "fast=true" bit, that wasn't reality.  This has been a learning process and one which will ultimately benefit the users of apex.oracle.com going forward as well as the product, Oracle Application Express.  I am grateful to those customers and members of the APEX community for their patience during this time.  To paraphrase &lt;a href="http://en.wikipedia.org/wiki/Frank_Costanza"&gt;Frank Costanza&lt;/a&gt;, "We're back, baby!"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-2591446949578341166?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/2591446949578341166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=2591446949578341166' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/2591446949578341166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/2591446949578341166'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/02/making-apexoraclecom-fast-again.html' title='Making apex.oracle.com fast (again)'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-1917965075767758642</id><published>2010-01-27T11:28:00.006-05:00</published><updated>2010-01-27T13:53:38.541-05:00</updated><title type='text'>The Perils of Modifying the Application Express Metadata</title><content type='html'>Last week, Oracle Support contacted me about an escalated Service  Request they received from a customer.  This customer, who was running Application Express 3.2, was unable to take an application export file from their production environment and import it into their development environment.  During import, it would fail with:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ORA-20001: GET_BLOCK Error. ORA-20001: Execution of the statement was unsuccessful. ORA-00001: unique constraint (APEX_030200.WWV_FLOW_WORKSHEET_RPTS_UK) violated&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I received a copy of this application export file, uploaded it to apex.oracle.com, and immediately ran into the same error when I attempted to install it into my workspace.  Unfortunately, the customer was in a situation where they could no longer import this application into any other workspace or instance.  It appeared that the generated export file and metadata on their production instance was corrupted.&lt;br /&gt;&lt;br /&gt;How did they possibly get into this state?  Well, it was a sequence of:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The customer was first directed to David's blog posting at &lt;a href="http://dpeake.blogspot.com/2009/01/preserving-user-saved-interactive.html"&gt;http://dpeake.blogspot.com/2009/01/preserving-user-saved-interactive.html&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;That was unsatisfactory, so they followed a link to Martin's blog posting at:  &lt;a href="http://apex-smb.blogspot.com/2009/10/saving-saved-interactive-reports-when.html"&gt;http://apex-smb.blogspot.com/2009/10/saving-saved-interactive-reports-when.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Then, not based on any information in either of these blog postings, the customer dropped a unique index and disabled two foreign key constraints from the APEX_030200 schema.&lt;/li&gt;&lt;li&gt;Finally, via some manual DML, it appears that the customer was able to modify the metadata of saved Interactive Reports such that they now violated the conditions of this unique constraint.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;While I completely understand &lt;span style="font-weight: bold;"&gt;why &lt;/span&gt;the customer went down the path that they did (to restore their end user's Interactive Reports), they should have &lt;span style="font-weight: bold;"&gt;never &lt;/span&gt;resorted to manually modifying the metadata and database objects in the Application Express schema.  Fortunately, I was able to easily reproduce the customer's problem and was able to craft a custom patch script for their environment to restore what had been done to it.&lt;br /&gt;&lt;br /&gt;Did the customer perform an action which was unsupported by Oracle Support which resulted in the corruption of their environment?  Yes.  Did the customer have any recourse?  No, not really.  Was Oracle Support obligated to help this customer recover?  Maybe not.  But even though they knowingly did this, I didn't want to have one unhappy Oracle and APEX customer when we were done.&lt;br /&gt;&lt;br /&gt;In general, Oracle Support will make every effort to help a customer with their Oracle Application Express product issues.  But in cases like this one, where the customer performed actions directly against the undocumented, internal Application Express schema, there really aren't any guarantees that Oracle Support nor Application Express product development will be able to help a customer recover from this type of corruption.&lt;br /&gt;&lt;br /&gt;Typical unsupported actions which can lead to corruption include dropping users, revoking privileges, dropping/modifying constraints, inserting/updating/deleting data, etc..  This situation is really no different than if a customer dropped SYS.STANDARD from their database or dropped internal packages or views from their eBusiness Suite environment.&lt;br /&gt;&lt;br /&gt;Moral of the story:  When you're considering to directly modify any objects in the Application Express schema, it's in your best interest to abstain.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-1917965075767758642?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/1917965075767758642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=1917965075767758642' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1917965075767758642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1917965075767758642'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/01/perils-of-modifying-application-express.html' title='The Perils of Modifying the Application Express Metadata'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-3451990025117134800</id><published>2010-01-25T09:02:00.004-05:00</published><updated>2010-01-25T09:15:10.399-05:00</updated><title type='text'>Application Express 4.0 Early Adopter Refresh is coming</title><content type='html'>The Application Express 4.0 Early Adopter's program at &lt;a href="http://tryapexnow.com"&gt;http://tryapexnow.com&lt;/a&gt; has been a smashing success, so far.  2,440 workspaces have been requested and created on this instance, and a plethora of feedback has been received.  Our customers have reported both bugs and made numerous feature suggestions, some of which you will see implemented in Application Express 4.0 production.  So thank you for this tremendous amount of participation - this is further proof that Application Express has such a vibrant community.&lt;br /&gt;&lt;br /&gt;In the coming weeks, we will be refreshing the Application Express 4.0 Early Adopter's Instance with an updated build of Application Express 4.0.  One of the significant features to be enabled in this build will be Oracle Application Express Websheets.&lt;br /&gt;&lt;br /&gt;Although it has been our intention to preserve the existing workspaces when we install the new Application Express 4.0 environment, the odds are about 97% that you will need to sign up for an entirely new workspace and schema - that is, nothing from the current Early Adopter's will be preserved.  An application export *may* work in the updated instance, but that is not guaranteed either.  Certainly, though, all of the submitted feedback from our customers will be preserved and available.  We'll provide advance notice of at least a couple weeks before this refresh (really, "rebuild") of the environment will take place.  And this new environment will happen in a database with an AL32UTF8 character set.&lt;br /&gt;&lt;br /&gt;Thank you for your many contributions to the success of Application Express 4.0.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-3451990025117134800?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/3451990025117134800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=3451990025117134800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3451990025117134800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3451990025117134800'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/01/application-express-40-early-adopter.html' title='Application Express 4.0 Early Adopter Refresh is coming'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5308380968424308012</id><published>2010-01-06T11:29:00.005-05:00</published><updated>2010-01-06T11:41:12.870-05:00</updated><title type='text'>OTN Developer Day in the Big Apple</title><content type='html'>For those of you in or near New York City, next week Wednesday, January 13, 2010, at the New York Marriot Marquis, there is an Oracle-sponsored &lt;a href="http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=101955&amp;amp;src=6773869&amp;amp;src=6773869&amp;amp;Act=85"&gt;OTN Developer Day- Hands-on Oracle Database 11g Applications Development&lt;/a&gt;.  There are four different tracks, and one of the tracks is dedicated to Oracle Application Express.  The other three tracks are for Database Development, Java and .NET.&lt;br /&gt;&lt;br /&gt;This event is free.  Also, you should bring your own laptop for the labs throughout the day.  You'll walk away with a virtual machine containing Oracle Database 11gR2 with Oracle Application Express 3.2.1 installed.  Lastly, this will be a good time to meet with several members of the Oracle Application Express development team, including Mike Hichwa (our VP), Marc Sewtz, David Peake and Christina Cho.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xzek4R5SEds/S0S9Cc0GKII/AAAAAAAAAo8/3wW51eo2zPE/s1600-h/odd_apex.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 118px;" src="http://2.bp.blogspot.com/_Xzek4R5SEds/S0S9Cc0GKII/AAAAAAAAAo8/3wW51eo2zPE/s320/odd_apex.png" alt="" id="BLOGGER_PHOTO_ID_5423667701053008002" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5308380968424308012?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5308380968424308012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5308380968424308012' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5308380968424308012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5308380968424308012'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2010/01/otn-developer-day-in-big-apple.html' title='OTN Developer Day in the Big Apple'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xzek4R5SEds/S0S9Cc0GKII/AAAAAAAAAo8/3wW51eo2zPE/s72-c/odd_apex.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-7569224835306641335</id><published>2009-12-20T22:50:00.002-05:00</published><updated>2009-12-20T22:56:07.238-05:00</updated><title type='text'>A few notes about the Application Express 4.0 Early Adopter</title><content type='html'>&lt;ol&gt;&lt;li&gt;The database character set is WE8MSWIN1252.  When we create the Early Adopter 2 instance of APEX 4.0 (hopefully in January, 2010), the database character set will be AL32UTF8.  Unfortunately, today you may experience some character conversion errors if you attempt to use characters outside of the character set (e.g., Chinese, Japanese, Hebrew, Arabic, etc.).&lt;/li&gt;&lt;li&gt;We will notify people in advance, at least a week, when we will install APEX 4.0 Early Adopter 2.&lt;/li&gt;&lt;li&gt;When APEX 4.0 Early Adopter 2 is installed, it is our intention to preserve the workspace definitions, your workspace credentials, and also your schema (objects and data).  However, any APEX applications will be purged.  You may be able to export the applications beforehand and import them into APEX 4.0 EA2, but that's not guaranteed.&lt;/li&gt;&lt;li&gt;APEX 4.0 Early Adopter 2 will add Websheets in addition to better support for Internet Explorer, among other things.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-7569224835306641335?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/7569224835306641335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=7569224835306641335' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7569224835306641335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7569224835306641335'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/12/few-notes-about-application-express-40.html' title='A few notes about the Application Express 4.0 Early Adopter'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5120900883740888440</id><published>2009-12-10T15:19:00.017-05:00</published><updated>2011-10-27T12:28:34.750-04:00</updated><title type='text'>Moving table data from SQL Developer into Application Express using XML</title><content type='html'>Gary, an Application Express customer for many years, recently sent me a message with a problem he was having getting table data, exported from &lt;a href="http://www.oracle.com/technology/products/database/sql_developer/index.html"&gt;Oracle SQL Developer&lt;/a&gt; in XML format, into &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt;.  He pointed me to his &lt;a href="http://forums.oracle.com/forums/thread.jspa?messageID=3926257&amp;amp;#3926257"&gt;post&lt;/a&gt; on the Oracle Application Express discussion forum on OTN.&lt;br /&gt;&lt;br /&gt;Using the EMP table as an example, he showed me that the data he exported from SQL Developer looked something like:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml;toolbar:false;"&gt;&lt;?xml version='1.0'  encoding='Cp1252' ?&gt;&lt;br /&gt;&lt;RESULTS&gt;&lt;br /&gt;    &lt;ROW&gt;&lt;br /&gt;        &lt;COLUMN NAME="EMPNO"&gt;&lt;![CDATA[7839]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="ENAME"&gt;&lt;![CDATA[KING]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="JOB"&gt;&lt;![CDATA[PRESIDENT]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="MGR"&gt;&lt;![CDATA[]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="HIREDATE"&gt;&lt;![CDATA[17-NOV-81]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="SAL"&gt;&lt;![CDATA[5000]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="COMM"&gt;&lt;![CDATA[]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="DEPTNO"&gt;&lt;![CDATA[10]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;    &lt;/ROW&gt;&lt;br /&gt;    &lt;ROW&gt;&lt;br /&gt;        &lt;COLUMN NAME="EMPNO"&gt;&lt;![CDATA[7934]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="ENAME"&gt;&lt;![CDATA[MILLER]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="JOB"&gt;&lt;![CDATA[CLERK]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="MGR"&gt;&lt;![CDATA[7782]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="HIREDATE"&gt;&lt;![CDATA[23-JAN-82]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="SAL"&gt;&lt;![CDATA[1300]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="COMM"&gt;&lt;![CDATA[]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="DEPTNO"&gt;&lt;![CDATA[10]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;    &lt;/ROW&gt;&lt;br /&gt;&lt;/RESULTS&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;He originally thought that Application Express was choking on the CDATA values.  It isn't that Application Express didn't like the CDATA elements, it's just that they are two completely different XML formats.  Underneath the hood, Application Express uses &lt;a href="http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_xmlsav.htm#i1049047"&gt;DBMS_XMLSAVE.INSERTXML&lt;/a&gt; for the XML loading, and it uses the default ROWSET and ROW tags.  SQL Developer, for whatever reason, uses a different format.  Maybe there's a way to control this in SQL Developer, but I'm not aware of it.&lt;br /&gt;&lt;br /&gt;So how do we transform the XML from SQL Developer into something compatible with the standard ROWSET format used by Application Express?  Well...this is exactly what &lt;a href="http://en.wikipedia.org/wiki/XSL_Transformations"&gt;XSLT&lt;/a&gt; was designed for.  I'm no XSLT expert, but I learned enough from &lt;a href="http://carlback.blogspot.com/"&gt;Carl's&lt;/a&gt; examples to accomplish this type of simple transformation.  You can use any XSLT engine to do this type of transformation, but I chose to use &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2FB55371-C94E-4373-B0E9-DB4816552E41&amp;amp;displaylang=en"&gt;Microsoft's command-line utility, msxsl&lt;/a&gt;, to do this. &lt;br /&gt;&lt;br /&gt;1) Before I did anything else, I had to re-generate the XML from SQL Developer so the DATA type data values would be in the canonical date format used by Application Express XML data loading.  To do this, from the SQL Worksheet in SQL Developer, I issued the statement:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;alter session set nls_date_format = 'rrrr-MM-dd"T"HH24:mi:ss."000"'&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And then exported the data from SQL Developer to XML again, which now gave me:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml;toolbar:false;"&gt;&lt;?xml version='1.0'  encoding='Cp1252' ?&gt;&lt;br /&gt;&lt;RESULTS&gt;&lt;br /&gt;    &lt;ROW&gt;&lt;br /&gt;        &lt;COLUMN NAME="EMPNO"&gt;&lt;![CDATA[7839]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="ENAME"&gt;&lt;![CDATA[KING]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="JOB"&gt;&lt;![CDATA[PRESIDENT]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="MGR"&gt;&lt;![CDATA[]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="HIREDATE"&gt;&lt;![CDATA[1981-11-17T00:00:00.000]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="SAL"&gt;&lt;![CDATA[5000]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="COMM"&gt;&lt;![CDATA[]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="DEPTNO"&gt;&lt;![CDATA[10]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;    &lt;/ROW&gt;&lt;br /&gt;    &lt;ROW&gt;&lt;br /&gt;        &lt;COLUMN NAME="EMPNO"&gt;&lt;![CDATA[7934]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="ENAME"&gt;&lt;![CDATA[MILLER]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="JOB"&gt;&lt;![CDATA[CLERK]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="MGR"&gt;&lt;![CDATA[7782]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="HIREDATE"&gt;&lt;![CDATA[1982-01-23T00:00:00.000]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="SAL"&gt;&lt;![CDATA[1300]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="COMM"&gt;&lt;![CDATA[]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="DEPTNO"&gt;&lt;![CDATA[10]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;    &lt;/ROW&gt;&lt;br /&gt;&lt;/RESULTS&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) mxsxl did not like the encoding the SQL Developer included in my XML file (it will give an error like &lt;span style="font-style: italic;"&gt;"System does not support the specified encoding."&lt;/span&gt;)  So I edited the XML file from SQL Developer and changed:&lt;br /&gt;&lt;br /&gt;encoding='Cp1252'&lt;br /&gt;&lt;br /&gt;to&lt;br /&gt;&lt;br /&gt;encoding='utf-8'&lt;br /&gt;&lt;br /&gt;In my case, this didn't present a problem, as I have all ASCII characters in my XML file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) Then, I created a text file named 'emp.xslt' with the following contents:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml;toolbar:false;"&gt;&lt;xsl:stylesheet version = "1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;&lt;br /&gt;&lt;xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/&gt;&lt;br /&gt;&lt;xsl:template match="/"&gt;&lt;br /&gt;    &lt;xsl:element name="ROWSET"&gt;&lt;br /&gt;        &lt;xsl:for-each select="descendant::ROW"&gt;&lt;br /&gt;            &lt;xsl:element name="ROW"&gt;&lt;br /&gt;                &lt;xsl:for-each select="descendant::*"&gt;&lt;br /&gt;                    &lt;xsl:element name="{@NAME}"&gt;&lt;br /&gt;                            &lt;xsl:value-of select="text()"/&gt;&lt;br /&gt;                    &lt;/xsl:element&gt;&lt;br /&gt;                &lt;/xsl:for-each&gt;&lt;br /&gt;            &lt;/xsl:element&gt;&lt;br /&gt;        &lt;/xsl:for-each&gt;&lt;br /&gt;    &lt;/xsl:element&gt;&lt;br /&gt;&lt;/xsl:template&gt;&lt;br /&gt;&lt;/xsl:stylesheet&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) Finally, using the command-line in Windows, I simply issued:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;msxsl emp.xml emp.xslt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And voilà!  I was able to take:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml;toolbar:false;"&gt;&lt;?xml version='1.0'  encoding='Cp1252' ?&gt;&lt;br /&gt;&lt;RESULTS&gt;&lt;br /&gt;    &lt;ROW&gt;&lt;br /&gt;        &lt;COLUMN NAME="EMPNO"&gt;&lt;![CDATA[7839]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="ENAME"&gt;&lt;![CDATA[KING]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="JOB"&gt;&lt;![CDATA[PRESIDENT]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="MGR"&gt;&lt;![CDATA[]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="HIREDATE"&gt;&lt;![CDATA[1981-11-17T00:00:00.000]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="SAL"&gt;&lt;![CDATA[5000]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="COMM"&gt;&lt;![CDATA[]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="DEPTNO"&gt;&lt;![CDATA[10]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;    &lt;/ROW&gt;&lt;br /&gt;    &lt;ROW&gt;&lt;br /&gt;        &lt;COLUMN NAME="EMPNO"&gt;&lt;![CDATA[7934]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="ENAME"&gt;&lt;![CDATA[MILLER]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="JOB"&gt;&lt;![CDATA[CLERK]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="MGR"&gt;&lt;![CDATA[7782]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="HIREDATE"&gt;&lt;![CDATA[1982-01-23T00:00:00.000]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="SAL"&gt;&lt;![CDATA[1300]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="COMM"&gt;&lt;![CDATA[]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;        &lt;COLUMN NAME="DEPTNO"&gt;&lt;![CDATA[10]]&gt;&lt;/COLUMN&gt;&lt;br /&gt;    &lt;/ROW&gt;&lt;br /&gt;&lt;/RESULTS&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And turn it into:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml;toolbar:false;"&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;br /&gt;&lt;ROWSET&gt;&lt;br /&gt;&lt;ROW&gt;&lt;br /&gt;&lt;EMPNO&gt;7839&lt;/EMPNO&gt;&lt;br /&gt;&lt;ENAME&gt;KING&lt;/ENAME&gt;&lt;br /&gt;&lt;JOB&gt;PRESIDENT&lt;/JOB&gt;&lt;br /&gt;&lt;MGR&gt;&lt;/MGR&gt;&lt;br /&gt;&lt;HIREDATE&gt;1981-11-17T00:00:00.000&lt;/HIREDATE&gt;&lt;br /&gt;&lt;SAL&gt;5000&lt;/SAL&gt;&lt;br /&gt;&lt;COMM&gt;&lt;/COMM&gt;&lt;br /&gt;&lt;DEPTNO&gt;10&lt;/DEPTNO&gt;&lt;br /&gt;&lt;/ROW&gt;&lt;br /&gt;&lt;ROW&gt;&lt;br /&gt;&lt;EMPNO&gt;7934&lt;/EMPNO&gt;&lt;br /&gt;&lt;ENAME&gt;MILLER&lt;/ENAME&gt;&lt;br /&gt;&lt;JOB&gt;CLERK&lt;/JOB&gt;&lt;br /&gt;&lt;MGR&gt;7782&lt;/MGR&gt;&lt;br /&gt;&lt;HIREDATE&gt;1982-01-23T00:00:00.000&lt;/HIREDATE&gt;&lt;br /&gt;&lt;SAL&gt;1300&lt;/SAL&gt;&lt;br /&gt;&lt;COMM&gt;&lt;/COMM&gt;&lt;br /&gt;&lt;DEPTNO&gt;10&lt;/DEPTNO&gt;&lt;br /&gt;&lt;/ROW&gt;&lt;br /&gt;&lt;/ROWSET&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ready for loading into Application Express, and all with just a little bit of XSLT.&lt;br /&gt;&lt;br /&gt;I haven't tested what is output from SQL Developer for CLOBs and BLOBs, so I can't speak for this solution for those types.  But for the most common data types, this simple transformation can work quite easily.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5120900883740888440?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5120900883740888440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5120900883740888440' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5120900883740888440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5120900883740888440'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/12/moving-table-data-from-sql-developer.html' title='Moving table data from SQL Developer into Application Express using XML'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-4815050636182236521</id><published>2009-11-12T16:27:00.004-05:00</published><updated>2009-11-12T16:51:47.542-05:00</updated><title type='text'>(ā'pěks)</title><content type='html'>At the &lt;a href="http://www.odtugapextraining.com/"&gt;ODTUG APEXposed conference&lt;/a&gt; in Atlanta this week, a customer asked me to blog about how to abbreviate and pronounce the abbreviation for &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt;.  I've seen numerous abbreviations (Apex, ApEx, APPEx, AppEx, APEX), and I think the lack of a formal abbreviation lends to the confusion in pronunciation.  So here goes:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Whenever an abbreviation is used in informal writing, it's abbreviated in all uppercase:    APEX&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It's pronounced (ā'pěks).  It's a long 'A' as in 'acorn'.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In formal written materials from Oracle, it is always written as 'Oracle Application Express' and never abbreviated.  &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;In conversation and in some presentation materials, you will see the Oracle Application Express team use the above spelling and pronunciation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-4815050636182236521?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/4815050636182236521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=4815050636182236521' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4815050636182236521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4815050636182236521'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/11/apeks.html' title='(ā&apos;pěks)'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-906748653541823082</id><published>2009-11-02T21:15:00.007-05:00</published><updated>2009-11-03T05:31:33.143-05:00</updated><title type='text'>Who uses asktom.oracle.com?</title><content type='html'>I have dedicated a couple posts to describe &lt;a href="http://joelkallman.blogspot.com/2009/09/who-uses-apexoraclecom-update.html"&gt;who is using apex.oracle.com&lt;/a&gt;.  I have focused on the scalability of the Application Express environment on relatively cheap hardware.  And towards the end of September, we &lt;a href="http://joelkallman.blogspot.com/2009/09/ask-tom-moved-to-apexoraclecom.html"&gt;moved asktom.oracle.com to apex.oracle.com&lt;/a&gt;.  So why not combine the best of these topics and post about who is using asktom.oracle.com?&lt;br /&gt;&lt;br /&gt;AskTom officially moved to apex.oracle.com on 18-SEP-2009.  I turned on Google Analytics a day or two later.  So my snapshot of asktom.oracle.com covers the period from September 20, 2009 through November 2, 2009 - not quite a month and a half.&lt;br /&gt;&lt;br /&gt;Some interesting statistics:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;There were 517,599 "visits" and 1,005,189 page views.&lt;/li&gt;&lt;li&gt;78% of the page views were from hits from search engine results pages (thanks for the clarification, John Scott).&lt;/li&gt;&lt;li&gt;53% of the browsers are Internet Explorer - a number that I suspect gradually declines over time&lt;/li&gt;&lt;li&gt;People found the site searching for 'ORA-00604' more than they found it by searching for 'tom kyte'.  As a shareholder of Oracle, this statistic concerns me.&lt;/li&gt;&lt;li&gt;The lion's share of visits comes from the United States, followed by India, United Kingdom, Germany and Canada.&lt;/li&gt;&lt;/ol&gt;All in all, though, I'm quite happy with these numbers, and how it shows that the existing hardware on apex.oracle.com and this large database (with over 10,000 workspaces/users/tablespaces) was able to absorb the additional load with no problem.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a title="View asktom.oracle.com Google Analytics - 20091102 on Scribd" href="http://www.scribd.com/doc/22041476/asktom-oracle-com-Google-Analytics-20091102" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;asktom.oracle.com Google Analytics - 20091102&lt;/a&gt; &lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_16440407255293" name="doc_16440407255293" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="100%" &gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf?document_id=22041476&amp;access_key=key-gbc86h8eshl4po09ux8&amp;page=1&amp;version=1&amp;viewMode=list"&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;            &lt;param name="mode" value="list"&gt;       &lt;embed src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=22041476&amp;access_key=key-gbc86h8eshl4po09ux8&amp;page=1&amp;version=1&amp;viewMode=list" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_16440407255293_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" mode="list" height="700" width="700"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-906748653541823082?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/906748653541823082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=906748653541823082' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/906748653541823082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/906748653541823082'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/11/who-uses-asktomoraclecom.html' title='Who uses asktom.oracle.com?'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-6461461643333966776</id><published>2009-10-21T22:35:00.003-04:00</published><updated>2009-10-21T22:41:10.291-04:00</updated><title type='text'>Certification Exam for Oracle Application Express</title><content type='html'>Oracle is in the process of preparing a certification exam for Oracle Application Express.  Passing this exam will qualify someone as an "Oracle Application Express Developer Certified Expert."  This certification is intended for intermediate to advanced APEX Developers who have at least 6 months experience using Oracle Application Express.&lt;br /&gt;&lt;br /&gt;Participants for the very first pilot exam are being recruited now.  Keep in mind - the feedback and recommendations from the participants of this exam will help shape this course, so some feedback will be expected.  More information can be found at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/goto/apexpilot"&gt;http://www.oracle.com/goto/apexpilot&lt;/a&gt;&lt;br /&gt;&lt;p:colorscheme colors="#ffffff,#000000,#000000,#000000,#cccccc,#ff0000,#ff0000,#999999"&gt;&lt;/p:colorscheme&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-6461461643333966776?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/6461461643333966776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=6461461643333966776' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6461461643333966776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6461461643333966776'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/10/certification-exam-for-oracle.html' title='Certification Exam for Oracle Application Express'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-735723277403514657</id><published>2009-10-09T09:46:00.003-04:00</published><updated>2009-10-09T09:57:54.397-04:00</updated><title type='text'>Going to Oracle OpenWorld 2009?</title><content type='html'>Are you going to Oracle OpenWorld 2009?  If so, I encourage you to look us up.  The primary Application Express location will be in the DemoGrounds in Moscone West, stations W1, W2 and W3.  As you walk into the DemoGrounds, this will be in the front on the left side.  David has a map &lt;a href="http://dpeake.blogspot.com/2009/10/apex-demo-grounds-moscone-west.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A large majority of the Application Express product development team will be there, including Mike, Christina, &lt;a href="http://dpeake.blogspot.com/"&gt;David&lt;/a&gt;, &lt;a href="http://marcsewtz.blogspot.com/"&gt;Marc&lt;/a&gt;, Scott, &lt;a href="http://jastraub.blogspot.com/"&gt;Jason&lt;/a&gt;, &lt;a href="http://www.inside-oracle-apex.com/"&gt;Patrick&lt;/a&gt;, Hilary and &lt;a href="http://anthonyrayner.blogspot.com/"&gt;Anthony&lt;/a&gt;.  This is always a very rewarding event for us, as we get to learn directly from our users how they're using Application Express and what they want in the future.  We'll also give you a demonstration of what is coming in the future.&lt;br /&gt;&lt;br /&gt;Please stop by - we would love to meet you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-735723277403514657?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/735723277403514657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=735723277403514657' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/735723277403514657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/735723277403514657'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/10/going-to-oracle-openworld-2009.html' title='Going to Oracle OpenWorld 2009?'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-3866758958738866800</id><published>2009-09-18T12:57:00.006-04:00</published><updated>2009-09-18T13:20:10.181-04:00</updated><title type='text'>AnyChart AnyMap updated in Application Express 3.2.1</title><content type='html'>As John Allen pointed out in the &lt;a href="http://forums.oracle.com/forums/thread.jspa?threadID=951673"&gt;APEX discussion forum on OTN&lt;/a&gt;, when using the recently bundled and licensed AnyMap files with Application Express 3.2.1, a license message of "Your license does not include the AnyMap extension" was displayed on the rendered map.&lt;br /&gt;&lt;br /&gt;This problem is now corrected in Application Express 3.2.1.  The &lt;a href="http://www.oracle.com/technology/products/database/application_express/download.html"&gt;full download from OTN&lt;/a&gt; has been updated with this new file as well as the Application Express 3.2.1 patch set on &lt;a href="https://metalink.oracle.com/"&gt;Oracle MetaLink&lt;/a&gt; (Patch Number 8548651).  The file that has been updated is /images/flashchart/swf/AnyChart.swf, and this would need to be replaced in  your current images directory for Application Express 3.2.1.  This has also been corrected on &lt;a href="http://apex.oracle.com/"&gt;http://apex.oracle.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you have already installed/upgraded to Application  Express 3.2.1 and you want to get this new file:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download the Application Express 3.2.1 patch set from MetaLink and apply it to your Application Express 3.2.1 instance.  If you're running the XDB HTTP Protocol Server/embedded PL/SQL Gateway, all you'll really need to do is run the SQL script apxldimg.sql to restage all of the files in the /images/ directory in XDB.  If you're using Oracle HTTP Server, then you can just simply copy the updated /images/flaschart/swf/AnyChart.swf file to your existing /images/ directory.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you don't have access to MetaLink, then you'll need to download the full Application Express 3.2.1 distribution and put this new AnyChart.swf file in place - either in XDB or in your existing /images/ directory.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Unfortunately, &lt;a href="http://www.oracle.com/technology/software/products/database/index.html"&gt;Oracle Database 11gR2 11.2.0.1&lt;/a&gt; will continue to ship with this previous AnyChart.swf file, and if you wish to use the maps or Gantt charts, you'll need to download the Application Express 3.2.1 patch set from &lt;a href="https://metalink.oracle.com/"&gt;Oracle MetaLink&lt;/a&gt; and apply it.&lt;br /&gt;&lt;br /&gt;There is no declarative interface in Application Express 3.2.1 to create maps or Gantt charts.  You'll need to understand their respective APIs to be able to use these components in your Application Express application.  But the maps and Gantt charts are included in the license for Application Express 3.2.1.  The declarative interface to maps and Gantt charts is coming in Application Express 4.0, and you'll be able to see this in action at &lt;a href="http://www.oracle.com/us/openworld/index.htm"&gt;Oracle Open World 2009&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-3866758958738866800?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/3866758958738866800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=3866758958738866800' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3866758958738866800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3866758958738866800'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/09/anymap-updated-in-application-express.html' title='AnyChart AnyMap updated in Application Express 3.2.1'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-1483734039127576655</id><published>2009-09-18T10:40:00.008-04:00</published><updated>2009-09-18T11:21:42.207-04:00</updated><title type='text'>Who uses apex.oracle.com (an update)</title><content type='html'>In February 2008, I posted "&lt;a href="http://joelkallman.blogspot.com/2008/02/who-uses-apexoraclecom.html"&gt;Who uses apex.oracle.com?&lt;/a&gt;".  I thought it was time for a quick update.&lt;br /&gt;&lt;br /&gt;I have left the same &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt; code in place.  And keep in mind - this has only been tracking users who hit the &lt;a href="http://apex.oracle.com/pls/otn/f?p=4550:1"&gt;login page&lt;/a&gt; on apex.oracle.com and nowhere else - not within Application Express after logging in, not those users who go directly to &lt;a href="http://apex.oracle.com/pls/otn/f?p=11933:5"&gt;Carl Backstrom's&lt;/a&gt; or &lt;a href="http://apex.oracle.com/pls/otn/f?p=31517:1"&gt;Denes Kubicek's&lt;/a&gt; or &lt;a href="http://apex.oracle.com/pls/otn/f?p=200801:1"&gt;Mark Lancaster's&lt;/a&gt; sample applications, nor those users who go directly to &lt;a href="http://www.promedmail.org/"&gt;ProMED Mail&lt;/a&gt;.   It only tracks those who go to the login page. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a title="View apex.oracle.com Google Analytics - 20090918 on Scribd" href="http://www.scribd.com/doc/19892155/apexoraclecom-Google-Analytics-20090918" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;apex.oracle.com Google Analytics - 20090918&lt;/a&gt; &lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_765579658025960" name="doc_765579658025960" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="700" width="700" &gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf?document_id=19892155&amp;access_key=key-2gmroh6u95f099b5c3eq&amp;page=1&amp;version=1&amp;viewMode=list"&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;            &lt;param name="mode" value="list"&gt;       &lt;embed src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=19892155&amp;access_key=key-2gmroh6u95f099b5c3eq&amp;page=1&amp;version=1&amp;viewMode=list" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_765579658025960_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" mode="list" height="700" width="700"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So what can we conclude?&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;United States still holds the top spot - not surprisingly since we tend to talk about APEX a little more (as a lot of us live and work in the U.S.)&lt;/li&gt;&lt;li&gt;India has surpassed the United Kingdom&lt;/li&gt;&lt;li&gt;Colombia shot up from 22 to 9.&lt;/li&gt;&lt;li&gt;Romania moved from 8th to 4th - a strong showing.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There were previously 122 distinct countries that touched apex.oracle.com.  Now it's up to 152 distinct countries.&lt;/li&gt;&lt;li&gt;Some dude in New Caledonia checked out Application Express and never came back.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;In hindsight, I should have left this Analytics JavaScript code in place in the System Message itself, so I could track who actually logs in and uses Application Express - I'll add it back now.  But this explains why you see a difference with statistics from February 2008 with the Pages/Visit and Average Time on Site - I've only been tracking the login page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-1483734039127576655?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/1483734039127576655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=1483734039127576655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1483734039127576655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1483734039127576655'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/09/who-uses-apexoraclecom-update.html' title='Who uses apex.oracle.com (an update)'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-1500261694388451232</id><published>2009-09-18T09:37:00.004-04:00</published><updated>2009-09-18T09:55:11.879-04:00</updated><title type='text'>Oracle Multimedia DICOM demonstration application available</title><content type='html'>I won't pretend to be an expert in &lt;a href="http://en.wikipedia.org/wiki/Dicom"&gt;DICOM - Digital Imaging and Communications in Medicine&lt;/a&gt;.  But I do know that the &lt;a href="http://www.oracle.com/technology/products/multimedia/index.html"&gt;Oracle Multimedia&lt;/a&gt; team are experts in this field, and they recently released a new packaged application which demonstrates the use of DICOM Medical Image Support in the Oracle Database 11g, all from within an Application Express application.  This just further illustrates my point that &lt;a href="http://otn.oracle.com/apex"&gt;Oracle Application Express&lt;/a&gt;, instead of insulating you from the database via multiple layers and stacks and tiers, enables you to readily exploit the native functionality of the Oracle Database, like Oracle Multimedia and the DICOM features.&lt;br /&gt;&lt;br /&gt;From Melli, the Oracle Multimedia Product Manager:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The DICOM sample application shows how the database can be used to store and manage DICOM medical images and illustrates how quickly Oracle technology (DICOM functionality and &lt;a href="http://apex.oracle.com"&gt;Application Expres&lt;/a&gt;s) can be used to build an archive to manage medical images.  With this archive application, clinicians can easily browse the images, share images with other clinicians, and search images.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The DICOM sample application is demonstrated in a browser.  Because a DICOM viewer is not available, full-size JPEG images and JPEG thumbnail images are created using &lt;a href="http://www.oracle.com/technology/products/multimedia/pdf/11gr2_collateral/dicom11gr2_wp_medimgsupport.pdf"&gt;Oracle Multimedia DICOM&lt;/a&gt; features. These images are stored in a main archive table, along with the original DICOM images. Additionally, all the meta data from the DICOM images is extracted from the DICOM images to enable searching based on DICOM meta data.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The DICOM Image Archive Demonstration application can be &lt;a href="http://www.oracle.com/technology/products/database/application_express/packaged_apps/packaged_apps.html#DICOM"&gt;downloaded&lt;/a&gt; from the Oracle Application Express Packaged Applications.  You can also preview the &lt;a href="https://apex.oracle.com/pls/otn/f?p=39561:1"&gt;DICOM Image Archive Demonstration&lt;/a&gt; as well as the &lt;a href="https://apex.oracle.com/pls/otn/f?p=38245:1"&gt;DICOM Image Archive Administration&lt;/a&gt; applications, all running on (you guessed it) apex.oracle.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-1500261694388451232?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/1500261694388451232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=1500261694388451232' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1500261694388451232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1500261694388451232'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/09/oracle-multimedia-dicom-demonstration.html' title='Oracle Multimedia DICOM demonstration application available'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-8785736998854421634</id><published>2009-09-18T09:01:00.004-04:00</published><updated>2009-09-18T09:28:04.603-04:00</updated><title type='text'>Ask Tom moved to apex.oracle.com</title><content type='html'>For those who are familiar with &lt;a href="http://tkyte.blogspot.com/"&gt;Tom Kyte&lt;/a&gt; and his site &lt;a href="http://asktom.oracle.com/"&gt;Ask Tom&lt;/a&gt;, this is now running on apex.oracle.com.  Don't believe me?  Then compare &lt;a href="http://asktom.oracle.com"&gt;http://asktom.oracle.com&lt;/a&gt; and &lt;a href="http://apex.oracle.com/pls/otn/f?p=100:1"&gt;http://apex.oracle.com/pls/otn/f?p=100:1&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This turned out to be a fairly painless exercise.  I actually moved the application about 4 months ago, created the workspace, created the ASKTOM database user, did an initial database import of his database objects and data, imported  his application, changed all of the references to images and CSS's in a custom /i/asktom_i directory to be Shared Components of the application, and then worked with Global IT to setup the proper definition of this new Virtual Host and other Web Server configuration.  Then it was just a simple matter of timing, to coordinate the DNS switch (which Global IT handled) and the Data Pump export and import (which Tom handled - I tried to think of someone more qualified and could not).&lt;br /&gt;&lt;br /&gt;The switch from the old server to the new application on apex.oracle.com happened yesterday at 16:48P EDT (GMT - 04:00).  Since then, roughly 16 hours ago, we've had 24,701 page views on the AskTom application.  And Tom went so far as to describe the performance as "snappy".&lt;br /&gt;&lt;br /&gt;I warned Tom that there is an &lt;a href="http://forums.oracle.com/forums/thread.jspa?threadID=953240"&gt;ongoing issue&lt;/a&gt; with some users and the network performance to apex.oracle.com, and that the new AskTom would be inheriting this issue, but so far, no issues have been reported.  And for the person who will undoubtedly &lt;a href="http://joelkallman.blogspot.com/2009/06/who-says-application-express-cant-scale.html"&gt;call me out&lt;/a&gt; and say "apex.oracle.com is not intended for production applications", that is a correct statement - if you're not ProMED or AskTom and you don't work in my group, consider it only your playground and demonstration instance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-8785736998854421634?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/8785736998854421634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=8785736998854421634' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8785736998854421634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8785736998854421634'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/09/ask-tom-moved-to-apexoraclecom.html' title='Ask Tom moved to apex.oracle.com'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-8277087739353145934</id><published>2009-09-10T13:38:00.003-04:00</published><updated>2009-09-10T13:49:02.613-04:00</updated><title type='text'>Minimum database version for Application Express 4.0</title><content type='html'>Today, &lt;a href="http://anthonyrayner.blogspot.com/"&gt;Anthony Rayner&lt;/a&gt; sent me a message, describing the issue he had installing a recent build of Application Express 4.0 on his database.  He ran into all sorts of compilation errors.  As it turns out, Anthony was using Oracle Database version 10.2.0.1.  And that won't work with Application Express 4.0.&lt;br /&gt;&lt;br /&gt;Starting with Oracle Application Express 4.0 (most likely due out some time in 2010), the minimum database version will be 10.2.0.3.  Database version 10.2.0.2 or less will not work.  Application Express  4.0 cannot be installed and function and be supported in the earlier database versions - hacking the installation scripts won't work this time.&lt;br /&gt;&lt;br /&gt;I say this with one caveat, though.  Application Express 4.0 will still work with &lt;a href="http://www.oracle.com/technology/products/database/xe/index.html"&gt;XE&lt;/a&gt;.  Even though the database version of XE is 10.2.0.1, it's not really the same software as 10.2.0.1 of the released database software (i.e., Standard Edition).  XE is really 10.2.0.1+.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-8277087739353145934?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/8277087739353145934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=8277087739353145934' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8277087739353145934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8277087739353145934'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/09/minimum-database-version-for.html' title='Minimum database version for Application Express 4.0'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-603456594487000714</id><published>2009-08-26T13:37:00.005-04:00</published><updated>2011-10-27T12:26:09.609-04:00</updated><title type='text'>Why I use the Resource Manager on apex.oracle.com</title><content type='html'>A few weeks ago, I blogged about the use of the &lt;a href="http://joelkallman.blogspot.com/2009/08/oracle-database-resource-manager-and.html"&gt;Oracle Database Resource Manager and apex.oracle.com&lt;/a&gt;, and how it is essential to keep this service up and running.&lt;br /&gt;&lt;br /&gt;Well, today, I stumbled across 10 active database sessions, all from the same user, all running an anonymous PL/SQL block issued within SQL Commands on apex.oracle.com.  All 10 sessions had been running for hundreds of seconds and all 10 were in the APEX_LOW resource consumer group.  By using the built-in-to-APEX Utilities -&gt; Database Monitor -&gt; Sessions reports, I was able to determine exactly what was executing in these sessions.&lt;br /&gt;&lt;br /&gt;What's wrong with this user's code?&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;DECLARE&lt;br /&gt;i NUMBER(3):=1;&lt;br /&gt;BEGIN&lt;br /&gt;   WHILE (i&lt;5) LOOP&lt;br /&gt;      IF( mod(i,2)=0)  THEN       &lt;br /&gt;         DBMS_OUTPUT.PUT_LINE(i);&lt;br /&gt;      END IF;&lt;br /&gt;   END LOOP;   &lt;br /&gt;END;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I am &lt;span style="font-weight: bold;"&gt;NOT &lt;/span&gt;suggesting you run this on apex.oracle.com nor your own instance of Application Express.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-603456594487000714?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/603456594487000714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=603456594487000714' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/603456594487000714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/603456594487000714'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/08/why-i-use-resource-manager-on.html' title='Why I use the Resource Manager on apex.oracle.com'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-6481896463802245058</id><published>2009-08-25T08:55:00.015-04:00</published><updated>2009-08-25T10:30:44.162-04:00</updated><title type='text'>Application Express 3.2.1 patch set applied to apex.oracle.com</title><content type='html'>This past weekend, the forthcoming Application Express 3.2.1 patch set was applied to apex.oracle.com (and apex.oraclecorp.com, if you're an Oracle employee and user of the internal instance).  The &lt;a href="http://www.oracle.com/technology/products/database/application_express/html/3.2.1_patchnote.html"&gt;APEX 3.2.1 Patch Set Note&lt;/a&gt; lists the bugs fixed in this patch set.&lt;br /&gt;&lt;br /&gt;In addition to the bugs fixed in this patch set, a few interesting points:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The online help (the popup window of the brows-able documentation) is available in Japanese.&lt;/li&gt;&lt;li&gt;AnyChart AnyGantt Flash Gantt and AnyChart AnyMap files are included in this patch set.  Even though these aren't directly integrated into the Application Express declarative environment, they are included in the license of Application Express and available for your use within an Application Express application.&lt;/li&gt;&lt;li&gt;An updated version of FCKEditor is included, fixing a number of bugs.  However, one user has already reported a change in behavior, with the default behavior of the Enter key resulting in a '&amp;lt;p&amp;gt;' versus the previous '&amp;lt;br /&amp;gt;'.&lt;/li&gt;&lt;li&gt;This version of Application Express, 3.2.1.00.10, is the identical version that will be bundled with Oracle Database 11gR2.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;For those customers running Oracle Database 11gR1 11.1.0.7, you'll need to pay special attention to the &lt;a href="http://www.oracle.com/technology/products/database/application_express/html/3.2.1_patchnote.html#BABCGIAJ"&gt;note &lt;/a&gt;about applying the APEX 3.2.1 patch set.&lt;br /&gt;&lt;br /&gt;As with all past Application Express patch sets, the Application Express 3.2.1 patch set will be available for download on &lt;a href="http://metalink.oracle.com/"&gt;Oracle MetaLink&lt;/a&gt;.  The full distribution of APEX 3.2.1 will be available for download on OTN.  These should be available within one day.&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-6481896463802245058?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/6481896463802245058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=6481896463802245058' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6481896463802245058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6481896463802245058'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/08/application-express-321-patch-set.html' title='Application Express 3.2.1 patch set applied to apex.oracle.com'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-7196769585806803367</id><published>2009-08-20T14:05:00.003-04:00</published><updated>2009-08-20T14:10:19.242-04:00</updated><title type='text'>Neues Application Express Buch - auf Deutsch!</title><content type='html'>&lt;div&gt;Im November 2009 soll das neue Buch &lt;a href="http://www.amazon.de/Oracle-APEX-Praxis-Dietmar-Aust/dp/3826655494"&gt;"Oracle APEX und XE in der Praxis"&lt;/a&gt; von  &lt;a href="http://daust.blogspot.com/"&gt;Dietmar Aust&lt;/a&gt;, &lt;a href="http://deneskubicek.blogspot.com/"&gt;Denes Kubicek&lt;/a&gt; und Jens-Christian Pokolm herauskommen. Ich kenne  Dietmar schon seit den Anfangstagen der &lt;a href="http://otn.oracle.com/xe"&gt;Oracle XE Datenbank&lt;/a&gt;, wo er innerhalb  kurzer Zeit ein Experte für diese wurde. Und Denes Kubicek ist ein bekannter  Experte für Oracle Application Express, welcher letztes Jahr mit dem "Oracle  APEX Developer of the Year" ausgezeichnet wurde.&lt;/div&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt;Ich freue mich schon auf das Buch (und natürlich auch auf eine signierte  Ausgabe des Buches!).&lt;br /&gt;&lt;br /&gt;--------&lt;br /&gt;&lt;br /&gt;Coming in November 2009 is a new book from &lt;a href="http://daust.blogspot.com/"&gt;Dietmar Aust&lt;/a&gt;, &lt;a href="http://deneskubicek.blogspot.com/"&gt;Denes Kubicek&lt;/a&gt; and Jens-Christian Pokolm, entitled &lt;a href="http://www.amazon.de/Oracle-APEX-Praxis-Dietmar-Aust/dp/3826655494"&gt;"Oracle APEX und XE in der Praxis"&lt;/a&gt;.  I have known Dietmar since the early days of &lt;a href="http://otn.oracle.com/xe"&gt;Oracle Database XE&lt;/a&gt;, where he quickly became a subject matter expert.  And Denes Kubicek is a recognized expert of Oracle Application Express and was last year's Oracle APEX Developer of the Year.&lt;br /&gt;&lt;br /&gt;I look forward to this book (and getting a signed copy of this book!).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-7196769585806803367?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/7196769585806803367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=7196769585806803367' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7196769585806803367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7196769585806803367'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/08/neues-application-express-buch-auf.html' title='Neues Application Express Buch - auf Deutsch!'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5954608498564465282</id><published>2009-08-20T08:41:00.003-04:00</published><updated>2009-08-20T08:49:26.430-04:00</updated><title type='text'>Forthcoming book about Application Express</title><content type='html'>Today, &lt;a href="http://www.packtpub.com"&gt;Packt Publishing&lt;/a&gt; announced their forthcoming book, &lt;a href="http://www.packtpub.com/oracle-application-express-3-2/book"&gt;"Oracle Application Express 3.2 – The Essentials and More"&lt;/a&gt;, authored by my good friend &lt;a href="http://forums.oracle.com/forums/profile.jspa?userID=229120"&gt;Arie Geller&lt;/a&gt; and &lt;a href="http://www.linkedin.com/pub/matthew-lyon/8/803/540"&gt;Matthew Lyon&lt;/a&gt;.  The expected availability is January 2010.&lt;br /&gt;&lt;br /&gt;Congratulations, Arie.  The end is in sight!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5954608498564465282?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5954608498564465282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5954608498564465282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5954608498564465282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5954608498564465282'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/08/forthcoming-book-about-application.html' title='Forthcoming book about Application Express'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5098191906653064374</id><published>2009-08-13T15:02:00.004-04:00</published><updated>2009-08-13T15:20:56.350-04:00</updated><title type='text'>Application Express &amp; YubiKey</title><content type='html'>Roger Cohen from &lt;a href="http://www.apextras.com/"&gt;APEXtras&lt;/a&gt; was kind enough to introduce me to two-factor authentication using &lt;a href="http://www.yubico.com/products/yubikey/"&gt;YubiKey&lt;/a&gt; and Application Express.&lt;br /&gt;&lt;br /&gt;Now - I'll be honest, I had never heard of &lt;a href="http://www.yubico.com/products/yubikey/"&gt;YubiKey&lt;/a&gt; before, but I am familiar with two-factor authentication.  I am a satisfied user of &lt;a href="http://keepass.info/"&gt;KeePass&lt;/a&gt;, and I am able to maintain both a password and a separate key file (in my case, on a Flash Drive) for access to my encrypted KeePass passwords database.  I need both my password and the keyfile to access the passwords database.  I lose one or both and I can't get in.&lt;br /&gt;&lt;br /&gt;Roger gives a very good description of YubiKey &lt;a href="http://www.apextras.com/?p=204"&gt;here&lt;/a&gt;, what it's good for and why you would want to consider it.  But more importantly, Roger has a &lt;a href="http://apex.oracle.com/pls/otn/f?p=60256:1"&gt;working demonstration&lt;/a&gt; of APEX and YubiKey authentication live on apex.oracle.com.  Granted, you'll need a YubiKey for this demonstration to work.  Lastly, the folks from APEXtras were kind enough to post an &lt;a href="http://www.apextras.com/?p=218"&gt;explanation of the logic and all of the source code&lt;/a&gt; for the custom authentication for this solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5098191906653064374?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5098191906653064374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5098191906653064374' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5098191906653064374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5098191906653064374'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/08/yubikey-apex.html' title='Application Express &amp; YubiKey'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-4251060818787202458</id><published>2009-08-12T10:46:00.023-04:00</published><updated>2011-10-27T12:25:39.397-04:00</updated><title type='text'>Oracle Database Resource Manager and Oracle Application Express</title><content type='html'>At &lt;a href="http://www.odtugkaleidoscope.com/"&gt;ODTUG Kaleidoscope&lt;/a&gt; this year, I gave a presentation on using the Oracle Database Resource Manager with Oracle Application Express.  The &lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/dbrm001.htm#sthref2340"&gt;Oracle Database Resource Manager&lt;/a&gt; enables an administrator to control the allocation of hardware resources &lt;span style="font-weight: bold;"&gt;within &lt;/span&gt;an Oracle database - something that an OS-based process scheduler cannot accomplish.  The actual PowerPoint presentation &lt;a href="http://www.oracle.com/technology/products/database/application_express/ppt/odtug2009_jkallman_resmgr.ppt"&gt;is here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I often talk about the scalability of Oracle Application Express on apex.oracle.com, which runs on fairly modest hardware.  However, I fully believe that this database and server would eventually crumble if it were not for our use of the Oracle Database Resource Manager.  Unlike a database instance which is running a handful of tuned applications, apex.oracle.com is a free-for-all.  As long as you have a workspace, you can run whatever SQL you like from SQL Commands (I'm not recommending this), or, you could inadvertently write some pretty inefficient SQL or PL/SQL in your application.  Without any controls in place, a user could easily and quickly monopolize the CPU resources on apex.oracle.com.  And for a site that gets between 3.5 million and 6 million page views per week, page view requests could quickly back up and overwhelm the database server.&lt;br /&gt;&lt;br /&gt;So how do we manage this chaos?  Via the Oracle Database Resource Manager.  Rather than explain the syntax of the Resource Manager, I think it's much simpler to convey the plan that is in place right now on apex.oracle.com and then comment on it.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;-- apex.oracle.com resource plan&lt;br /&gt;&lt;br /&gt;-- Section 1&lt;br /&gt;begin&lt;br /&gt;  dbms_resource_manager.clear_pending_area();&lt;br /&gt;  dbms_resource_manager.create_pending_area();&lt;br /&gt;&lt;br /&gt;  dbms_resource_manager.create_consumer_group(&lt;br /&gt;      consumer_group =&gt; 'APEX_HIGH',&lt;br /&gt;      comment        =&gt; 'All APEX sessions start in this group.');&lt;br /&gt;  dbms_resource_manager.create_consumer_group(&lt;br /&gt;      consumer_group =&gt; 'APEX_MEDIUM',&lt;br /&gt;      comment        =&gt; 'APEX sessions are switched to this group after 10 seconds.');      &lt;br /&gt;  dbms_resource_manager.create_consumer_group(&lt;br /&gt;      consumer_group =&gt; 'APEX_LOW',&lt;br /&gt;      comment        =&gt; 'Any sessions in this group have been executing for more than 120 seconds');&lt;br /&gt;    &lt;br /&gt;  dbms_resource_manager.submit_pending_area();&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- Section 2&lt;br /&gt;begin&lt;br /&gt;    dbms_resource_manager_privs.grant_switch_consumer_group ( &lt;br /&gt;        grantee_name =&gt; 'APEX_PUBLIC_USER', &lt;br /&gt;        consumer_group =&gt; 'APEX_HIGH', &lt;br /&gt;        grant_option =&gt; FALSE );&lt;br /&gt;    dbms_resource_manager_privs.grant_switch_consumer_group ( &lt;br /&gt;        grantee_name =&gt; 'APEX_PUBLIC_USER', &lt;br /&gt;        consumer_group =&gt; 'APEX_MEDIUM', &lt;br /&gt;        grant_option =&gt; FALSE );&lt;br /&gt;    dbms_resource_manager_privs.grant_switch_consumer_group ( &lt;br /&gt;        grantee_name =&gt; 'APEX_PUBLIC_USER', &lt;br /&gt;        consumer_group =&gt; 'APEX_LOW', &lt;br /&gt;        grant_option =&gt; FALSE );&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;   -- Section 3&lt;br /&gt;  dbms_resource_manager.clear_pending_area();&lt;br /&gt;  dbms_resource_manager.create_pending_area();&lt;br /&gt;  dbms_resource_manager.create_plan( plan =&gt; 'APEX_ORACLE_COM_PLAN', comment =&gt; 'APEX Plan');&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;  -- Plan Directives Section      &lt;br /&gt;  dbms_resource_manager.create_plan_directive(&lt;br /&gt;      plan =&gt; 'APEX_ORACLE_COM_PLAN',&lt;br /&gt;      group_or_subplan =&gt; 'APEX_HIGH',&lt;br /&gt;      comment =&gt; 'All APEX sessions start in this group.',&lt;br /&gt;      mgmt_p1 =&gt; 70,&lt;br /&gt;      switch_group =&gt; 'APEX_MEDIUM',&lt;br /&gt;      switch_time =&gt; 10,&lt;br /&gt;      switch_for_call =&gt; TRUE,&lt;br /&gt;      switch_estimate =&gt; FALSE );&lt;br /&gt;&lt;br /&gt;  dbms_resource_manager.create_plan_directive(&lt;br /&gt;      plan =&gt; 'APEX_ORACLE_COM_PLAN',&lt;br /&gt;      group_or_subplan =&gt; 'APEX_MEDIUM',&lt;br /&gt;      comment =&gt; 'APEX sessions are switched to this group after 10 seconds.',&lt;br /&gt;      mgmt_p1 =&gt; 8,&lt;br /&gt;      switch_group =&gt; 'APEX_LOW',&lt;br /&gt;      switch_time =&gt; 120,&lt;br /&gt;      switch_for_call =&gt; TRUE,&lt;br /&gt;      switch_estimate =&gt; FALSE );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;  dbms_resource_manager.create_plan_directive(&lt;br /&gt;      plan=&gt; 'APEX_ORACLE_COM_PLAN',&lt;br /&gt;      group_or_subplan =&gt; 'APEX_LOW',&lt;br /&gt;      comment =&gt; 'Any sessions in this group have been executing for more than 120 seconds',&lt;br /&gt;      mgmt_p1 =&gt; 2,&lt;br /&gt;      switch_group =&gt; 'CANCEL_SQL',&lt;br /&gt;      switch_time =&gt; 1800,&lt;br /&gt;      switch_for_call =&gt; TRUE,&lt;br /&gt;      switch_estimate =&gt; FALSE );&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;  -- Section 4&lt;br /&gt;  dbms_resource_manager.create_plan_directive(&lt;br /&gt;      plan=&gt; 'APEX_ORACLE_COM_PLAN',&lt;br /&gt;      group_or_subplan =&gt; 'OTHER_GROUPS',&lt;br /&gt;      comment =&gt; 'The mandatory group',&lt;br /&gt;      mgmt_p1 =&gt;10);&lt;br /&gt;    &lt;br /&gt;  dbms_resource_manager.create_plan_directive(&lt;br /&gt;      plan=&gt; 'APEX_ORACLE_COM_PLAN',&lt;br /&gt;      group_or_subplan =&gt; 'ORA$AUTOTASK_SUB_PLAN',&lt;br /&gt;      comment =&gt; 'Sub plan for maintenance activity',&lt;br /&gt;      mgmt_p1 =&gt; 10 );&lt;br /&gt;    &lt;br /&gt;  -- Section 5&lt;br /&gt;  dbms_resource_manager.set_initial_consumer_group(&lt;br /&gt;      user =&gt; 'APEX_PUBLIC_USER',&lt;br /&gt;      consumer_group =&gt; 'APEX_HIGH');&lt;br /&gt;&lt;br /&gt;  dbms_resource_manager.submit_pending_area();&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- Section 6&lt;br /&gt;begin&lt;br /&gt;  dbms_scheduler.set_attribute( name =&gt; 'MONDAY_WINDOW',&lt;br /&gt;      attribute =&gt; 'RESOURCE_PLAN', value =&gt; 'APEX_ORACLE_COM_PLAN');&lt;br /&gt;  dbms_scheduler.set_attribute( name =&gt; 'TUESDAY_WINDOW',&lt;br /&gt;      attribute =&gt; 'RESOURCE_PLAN', value =&gt; 'APEX_ORACLE_COM_PLAN');&lt;br /&gt;  dbms_scheduler.set_attribute( name =&gt; 'WEDNESDAY_WINDOW',&lt;br /&gt;      attribute =&gt; 'RESOURCE_PLAN', value =&gt; 'APEX_ORACLE_COM_PLAN');&lt;br /&gt;  dbms_scheduler.set_attribute( name =&gt; 'THURSDAY_WINDOW',&lt;br /&gt;      attribute =&gt; 'RESOURCE_PLAN', value =&gt; 'APEX_ORACLE_COM_PLAN');&lt;br /&gt;  dbms_scheduler.set_attribute( name =&gt; 'FRIDAY_WINDOW',&lt;br /&gt;      attribute =&gt; 'RESOURCE_PLAN', value =&gt; 'APEX_ORACLE_COM_PLAN');&lt;br /&gt;  dbms_scheduler.set_attribute( name =&gt; 'SATURDAY_WINDOW',&lt;br /&gt;      attribute =&gt; 'RESOURCE_PLAN', value =&gt; 'APEX_ORACLE_COM_PLAN');&lt;br /&gt;  dbms_scheduler.set_attribute( name =&gt; 'SUNDAY_WINDOW',&lt;br /&gt;      attribute =&gt; 'RESOURCE_PLAN', value =&gt; 'APEX_ORACLE_COM_PLAN');&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- Section 7&lt;br /&gt;alter system set resource_manager_plan = 'APEX_ORACLE_COM_PLAN' scope=both;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Section 1 - Create three consumer groups with the names APEX_HIGH, APEX_MEDIUM and APEX_LOW.  These group names are arbitrary.  A consumer group is simply a collection of users.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Section 2 - Remember that the Oracle HTTP Server and mod_plsql connect to the database as user APEX_PUBLIC_USER (if you're using the embedded PL/SQL Gateway, this is user ANONYMOUS).  From a database perspective, all it sees are a bunch of database sessions, connecting as database user APEX_PUBLIC_USER.  So in Section 2, we are granting the ability to switch among these consumer groups to database user APEX_PUBLIC_USER.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Section 3 - Create the plan directives which controls how much of the machine resources is dedicated to a particular consumer group, and how long they are allowed to remain in this group before switching to another group.  So if a session is in the APEX_HIGH group, the APEX_HIGH group is entitled to 70% of the CPU resources.  If the top-level SQL call is executing for more than 10 "on-CPU" seconds, then they get switched to the APEX_MEDIUM group.  The APEX_MEDIUM group gets only 8% of the available CPU resources, for up to 120 seconds.  After 120 seconds, the session gets switched to the APEX_LOW group.  The APEX_LOW group has only 2% of the CPU resources available.  After 1800 seconds (which is a *long* time), if the top-level SQL call is still executing, then it will be canceled.  The session will not be killed, but the top-level SQL call will be canceled.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Section 4 - Directives are created for two other pre-defined and built-in groups, namely, OTHER_GROUPS and ORA$AUTOTASK_SUB_PLAN.  The ORA$AUTOTASK_SUB_PLAN is used for all of the automated maintenance tasks of the database (e.g., statistics collection).  OTHER_GROUPS is used for any other session not already a part of a group in the active Resource Manager plan.  This would be the group for anyone connecting directly to the database, background database jobs not running as APEX_PUBLIC_USER, etc.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Section 5 - Make APEX_HIGH, our newly created consumer group, the default consumer group for user APEX_PUBLIC_USER.  Then, submit the pending area for validation.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Section 6 - The Oracle database (at least for 11gR1 and 11gR2) ships with a predefined scheduler plan for maintenance tasks.  Modify the resource plan in effect during these maintenance windows.  If we don't, then the DEFAULT_MAINTENANCE_PLAN would be in effect and not our newly created Resource Manager Plan APEX_ORACLE_COM_PLAN.  And what that means is we'd be back to a free-for-all during this maintenance window, with anyone being able to monopolize the server.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Section 7 - Change the settings of the database to use our newly created plan.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There are tools available in Enterprise Manager to create and monitor resource plans, so you don't have to commit the syntax of all of these PL/SQL packages to memory.  Also, there are a large number of database views that can be used to monitor the Resource Manager, including:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;V$RSRC_PLAN – Currently active resource plan&lt;/li&gt;&lt;br /&gt;&lt;li&gt;V$RSRC_CONSUMER_GROUP – Cumulative amount of CPU stats&lt;/li&gt;&lt;br /&gt;&lt;li&gt;V$RSRC_PLAN_HISTORY – History of resource plan, when enabled, disabled or modified&lt;/li&gt;&lt;br /&gt;&lt;li&gt;V$RSRC_CONS_GROUP_HISTORY – History of consumer group statistics&lt;/li&gt;&lt;br /&gt;&lt;li&gt;V$RSRCMGRMETRIC – Information about resources consumed and wait times per consumer group&lt;/li&gt;&lt;br /&gt;&lt;li&gt;V$RSRCMGRMETRIC_HISTORY – History of Resource Manager metrics&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I granted privileges on these SYS-owned views to another database user that was mapped to an APEX workspace (actually, my workspace on apex.oracle.com).  Then, I was able to easily build an APEX application using Interactive Reports on top of these views and monitor how well we were doing.&lt;br /&gt;&lt;br /&gt;The Oracle Database Resource Manager is only available as a part of the Oracle Database Enterprise Edition.  It is not available with XE, Standard Edition One, or Standard Edition of the Oracle Database.  But for those customers that are already using Oracle Application Express on the Oracle Database Enterprise Edition, and they're attempting to consolidate a number of groups and applications onto a single instance, the Oracle Database Resource Manager can be easily used to prevent any one user or application from monopolizing the server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-4251060818787202458?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/4251060818787202458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=4251060818787202458' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4251060818787202458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4251060818787202458'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/08/oracle-database-resource-manager-and.html' title='Oracle Database Resource Manager and Oracle Application Express'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-8807062080955793877</id><published>2009-06-11T09:16:00.004-04:00</published><updated>2009-06-11T09:24:35.531-04:00</updated><title type='text'>BugDB Reporting</title><content type='html'>Sorry to do this on a public blog, but this is a posting which is only relevant to Oracle employees.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It seems a lot of teams are looking to create an analysis application on top of the BugDB, to perform their own analysis of the BugDB data for their own product.  There is a right way and a wrong way to get at this data.  The wrong &lt;span style="font-weight: bold;"&gt;slow&lt;/span&gt; way to get at this data is to build a report on top of a query across the database link to the BugDB and query this data each and every page view in your application.  The more efficient way to get at this data is to create a local table in your schema and then refresh from the BugDB into this local table, on demand.  This results in much less load on the BugDB database itself, and is also a much faster application for your end users.&lt;br /&gt;&lt;br /&gt;I actually cooked up something for someone else in Server Technologies.  It will create all the necessary database objects to refresh from the BugDB and it also includes an Interactive Report on top of the primary BugDB table RPTHEAD.  Anyone is welcome to use this application as a starting point.  It’s also hooked up with SSO authentication, so if you import this into your workspace on the internal instance of Application Express at http://apex.oraclecorp.com, you’ll be ready to go with internal single sign-on.  All you need to do is:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download and unzip the application export BugReports_installer.sql from:  &lt;a href="http://general.us.oracle.com/%7Ejkallman/bugreports/BugReports.zip"&gt;http://general.us.oracle.com/~jkallman/bugreports/BugReports.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Create a database link to the BugDB named ‘BUGDB.WORLD’ in your schema.  &lt;a href="https://bug.oraclecorp.com/help/ConnectToBugHelp.html#dblink"&gt;https://bug.oraclecorp.com/help/ConnectToBugHelp.html#dblink&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Import and install the application export BugReports_installer.sql into your workspace (presumably on apex.oraclecorp.com).&lt;/li&gt;&lt;li&gt;After installation, you’ll be prompted to Install Supporting Objects.  You should simply click Next &gt; through the wizard.  &lt;span style="font-weight: bold;"&gt;Prior to this step&lt;/span&gt;, the database link BUGDB.WORLD must exist.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;That’s all there is to it!  Run the application, navigate to the Administration tab, choose your product and timeframe, click Refresh, and then click the Bugs tab to view the Interactive Report on top of your local data.&lt;br /&gt;&lt;br /&gt;It may seem like a simple application, but with the Interactive Report on top of the BugDB RPTHEAD, each end user can create a variety of customized reports &lt;span style="font-weight: bold;"&gt;and save them&lt;/span&gt;.  You can read about Interactive Reports here:  &lt;a href="http://www.oracle.com/technology/obe/apex/apexusr31/apexusr31.htm"&gt;http://www.oracle.com/technology/obe/apex/apexusr31/apexusr31.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-8807062080955793877?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/8807062080955793877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=8807062080955793877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8807062080955793877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8807062080955793877'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/06/bugdb-reporting.html' title='BugDB Reporting'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-7362475178375549685</id><published>2009-06-09T11:21:00.004-04:00</published><updated>2009-06-09T11:54:29.731-04:00</updated><title type='text'>Who says Application Express can't scale?</title><content type='html'>Over a year ago, I wrote about &lt;a href="http://joelkallman.blogspot.com/2008/02/who-uses-apexoraclecom.html"&gt;who is using Oracle Application Express&lt;/a&gt; on http://apex.oracle.com.  At the time, I included some weekly statistics.&lt;br /&gt;&lt;br /&gt;During our team meetings every week, I report on the overall usage of http://apex.oracle.com.  I just wanted to report on some astounding numbers:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Total Page Views Distinct Applications Distinct Users&lt;br /&gt;---------------- --------------------- --------------&lt;br /&gt;       6225566                  3268           2778&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Total Workspaces&lt;br /&gt;----------------&lt;br /&gt;         11643&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Total Applications&lt;br /&gt;------------------&lt;br /&gt;           39849&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Workspaces Approved&lt;br /&gt;-------------------&lt;br /&gt;              316&lt;/pre&gt;&lt;br /&gt;That's 6,225,566 page views in the past week, and this is still running on the same Dell PowerEdge 1950.&lt;br /&gt;&lt;br /&gt;Now granted - the ability to sustain this type of load throughout the week deserves some credit to &lt;a href="http://krisrice.blogspot.com/"&gt;Kris Rice&lt;/a&gt;, who spent a fair amount of time analyzing Application Express on apex.oracle.com and identifying some major problem areas in performance.  As well, he brought in some experts to perform OS tuning.  The recent purge on apex.oracle.com removed close to 10,000 workspaces, schemas, tablespaces and datafiles.  Lastly, a couple months ago, I implemented a &lt;a href="http://www.oracle.com/technology/oramag/oracle/04-nov/o64tuning.html"&gt;Resource Manager&lt;/a&gt; plan which prevents someone from monopolizing the entire server.  I'll be presenting a detailed discussion of Resource Manager and apex.oracle.com at &lt;a href="http://www.odtugkaleidoscope.com/applicationexpress.html"&gt;ODTUG Kaleidoscope 2009&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A large number of these page views are from the bots of Search Engines, especially since &lt;a href="http://www.promedmail.org/"&gt;ProMED Mail&lt;/a&gt; is run on apex.oracle.com.  But a page view and execution of the engine is a page view and execution of the engine.  All in all, that's a large load on a relatively cheap piece of hardware.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-7362475178375549685?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/7362475178375549685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=7362475178375549685' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7362475178375549685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/7362475178375549685'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/06/who-says-application-express-cant-scale.html' title='Who says Application Express can&apos;t scale?'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-4300647771649780528</id><published>2009-06-02T09:47:00.005-04:00</published><updated>2009-06-02T10:15:16.339-04:00</updated><title type='text'>OraTweet - Micro-blogging with Oracle Application Express</title><content type='html'>About a year ago, &lt;a href="http://carlback.blogspot.com/"&gt;Carl Backstrom&lt;/a&gt; was telling me how he was helping another gentleman in Oracle, Noel Portugal from the CRM On Demand team, with a &lt;a href="http://en.wikipedia.org/wiki/Micro-blogging"&gt;micro-blogging&lt;/a&gt; site developed with &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt;.  Carl game me a demonstration of OraTweet, tried to explain &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt;, tweets, and micro-blogging.  I just didn't get it, at the time.&lt;br /&gt;&lt;br /&gt;Today, micro-blogging appears to be all the rage.  &lt;a href="http://www.dwighthoward.com/"&gt;Dwight Howard&lt;/a&gt; from the Orlando Magic basketball team is on &lt;a href="http://twitter.com/DwightHoward"&gt;Twitter&lt;/a&gt;.  &lt;a href="http://www.cnbc.com/"&gt;CNBC's&lt;/a&gt; Fast Money television show is on &lt;a href="http://twitter.com/fastmoneytv"&gt;Twitter&lt;/a&gt;.  &lt;a href="http://twitter.com/joelkallman"&gt;I am&lt;/a&gt; even on Twitter, but I really don't use it, as you can tell.&lt;br /&gt;&lt;br /&gt;Noel's application, &lt;a href="http://oratweet.com/"&gt;OraTweet&lt;/a&gt;, has been in use within Oracle for the past year.  As Noel states on the &lt;a href="http://oratweet.com"&gt;oratweet.com&lt;/a&gt; site:  "Teams around Oracle are finding ways to communicate with their teams while reducing email overload. The results have been amazing. Global team members are connecting and sharing information. Users have started to develop stand alone clients to consume OraTweet’s timeline. We have also integrated the OraTweet timeline to Oracle Connect, our own internal social network. Overall information is flowing faster in a lightweight format."&lt;br /&gt;&lt;br /&gt;Noel Portugal has developed an excellent &lt;a href="http://oratweet.com/"&gt;Web site&lt;/a&gt; which explains OraTweet, lets you submit feedback, and provides a link to download the entire source code for OraTweet:   &lt;a href="http://oratweet.com/"&gt;http://oratweet.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-4300647771649780528?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/4300647771649780528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=4300647771649780528' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4300647771649780528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/4300647771649780528'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/06/oratweet-micro-blogging-with-oracle.html' title='OraTweet - Micro-blogging with Oracle Application Express'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-2601304244098165818</id><published>2009-05-29T10:45:00.005-04:00</published><updated>2009-05-29T11:22:35.054-04:00</updated><title type='text'>See you in Monterey?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xzek4R5SEds/Sh_8guNk0FI/AAAAAAAAAT0/lhrMg0D014M/s1600-h/imga__24.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 211px; height: 100px;" src="http://4.bp.blogspot.com/_Xzek4R5SEds/Sh_8guNk0FI/AAAAAAAAAT0/lhrMg0D014M/s320/imga__24.jpg" alt="" id="BLOGGER_PHOTO_ID_5341265322175680594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Time is running out for the Oracle Development Tools User Group Kaleidoscope Conference in Monterey, California on 21-June-2009 through 25-June-2009.  The lower cost advanced &lt;a href="http://www.odtugkaleidoscope.com/registration.html"&gt;registration&lt;/a&gt; ends next Tuesday, 02-June-2009.  The folks from ODTUG were kind enough to provide a template to use for a &lt;a href="http://www.odtugkaleidoscope.com/Justification%20for%20attending_members.doc"&gt;justification letter&lt;/a&gt; for your employer.&lt;br /&gt;&lt;br /&gt;It all begins with the &lt;a href="http://odtugkaleidoscope.com/apexsymposium.html"&gt;Application Express Symposium&lt;/a&gt; on Sunday, of which over 160 people are registered.  Other than the opening remarks by some joker from Oracle, all other presentations at the Symposium are from customers and the community.  And then there is a &lt;a href="http://www.odtugkaleidoscope.com/applicationexpress.html"&gt;full agenda&lt;/a&gt; for the remainder of the week if you're interested in Oracle Application Express.&lt;br /&gt;&lt;br /&gt;This is an outstanding, well-organized and well-run conference, giving customers the opportunity to interact with some of the greatest Application Express experts from around the world.  This is a conference where you can listen, learn and discuss the solutions created by successful Oracle customers.  Oracle is invited to participate, but this conference is run by &lt;a href="http://www.odtug.com"&gt;ODTUG&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Disclaimer: I am not associated with this user group nor is there any financial incentive to me for the number of people in attendance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-2601304244098165818?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/2601304244098165818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=2601304244098165818' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/2601304244098165818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/2601304244098165818'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/05/see-you-in-monterey.html' title='See you in Monterey?'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xzek4R5SEds/Sh_8guNk0FI/AAAAAAAAAT0/lhrMg0D014M/s72-c/imga__24.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-3391155596193529011</id><published>2009-04-20T09:20:00.003-04:00</published><updated>2009-04-20T10:14:10.739-04:00</updated><title type='text'>Oracle Single Sign-On and apex.oracle.com</title><content type='html'>Application Express on apex.oracle.com is now registered as a Partner Application for Oracle Single Sign-On.  This means that you can now create demonstration and sample applications, hosted on apex.oracle.com, and have the users authenticate via the Oracle Single Sign-On Login Server.&lt;br /&gt;&lt;br /&gt;Who is registered on Oracle.com?  Well, if you have ever asked or answered a question on the wildly popular &lt;a href="http://forums.oracle.com/forums/forum.jspa?forumID=137"&gt;Oracle Application Express discussion forum on OTN&lt;/a&gt;, then you already have an account.&lt;br /&gt;&lt;br /&gt;To enable SSO authentication to Oracle.com in your application on apex.oracle.com, simply follow these steps:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Shared Components -&gt; Authentication Schemes&lt;/li&gt;&lt;li&gt;Click Create button&lt;/li&gt;&lt;li&gt;Choose “Based on a pre-configured scheme from the gallery” and click Next&lt;/li&gt;&lt;li&gt;Choose “Oracle Application Server Single Sign-On (Application Express Engine as Partner App)” and click Next&lt;/li&gt;&lt;li&gt;Give it a name like SSO and click Create Scheme&lt;/li&gt;&lt;li&gt;In the subsequent report of authentication schemes, click the “make current” link for your newly created SSO one&lt;/li&gt;&lt;li&gt;Click the Make Current button on the confirmation page&lt;/li&gt;&lt;li&gt;Go get a beer (or coffee or tea) to celebrate&lt;/li&gt;&lt;/ol&gt;It's that simple.&lt;br /&gt;&lt;br /&gt;To see this in action, &lt;a href="https://apex.oracle.com/pls/otn/f?p=63701:1"&gt;here's a very brief sample application&lt;/a&gt; with a public and non-public page, using SSO authentication.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-3391155596193529011?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/3391155596193529011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=3391155596193529011' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3391155596193529011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3391155596193529011'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/04/oracle-single-sign-on-and-apexoraclecom.html' title='Oracle Single Sign-On and apex.oracle.com'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-3442768929354917741</id><published>2009-04-08T21:22:00.018-04:00</published><updated>2011-10-27T12:25:01.500-04:00</updated><title type='text'>Cleaning Up</title><content type='html'>The architecture of Application Express is such that the database objects associated with a specific release all exist in a single schema.  For the original Oracle HTML DB 1.5, all of the database objects existed in schema FLOWS_010500.  As of the most recent version, Oracle Application Express 3.2, all of the database objects reside in schema APEX_030200.&lt;br /&gt;&lt;br /&gt;When a new version of Application Express is installed, the following three actions take place:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The new version is installed into a new schema (this happens the same whether it's a new installation or an upgrade installation).&lt;/li&gt;&lt;li&gt;The meta data from the previous version is copied and sometimes transformed into the new schema.&lt;/li&gt;&lt;li&gt;All of the public synonyms which were pointing at the "old" version are now redirected to the new version of Application Express.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;The beauty of this architecture is if an error occurs during installation or during upgrade, it's easy to revert back to the previous installation, as documented &lt;a href="http://download.oracle.com/docs/cd/E14373_01/install.32/e13366/trouble.htm#BABFEIGG"&gt;here&lt;/a&gt;.  Both an APEX 3.1 installation (in FLOWS_030100) and an APEX 3.2 installation (in APEX_030200) can exist in the Oracle database at the same time, and with only one version active.  Understand, though, if you choose to rollback and remove the newer version of Application Express, all of the changes made in the newer version (instance settings, application changes, new workspaces, etc.) will &lt;span style="font-weight: bold;"&gt;not &lt;/span&gt;be propagated back to the old version of Application Express if you &lt;a href="http://download.oracle.com/docs/cd/E14373_01/install.32/e13366/trouble.htm#BABFEIGG"&gt;switch schemas&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Once you have successfully upgraded your instance of Application Express, tested all of the upgraded applications, and deem the upgrade successful, there is no reason to maintain the old version of Application Express.  Not only does it take up space in your database, it leaves a fairly privileged database account in the database, and this could pose a security risk if compromised.&lt;br /&gt;&lt;br /&gt;For apex.oracle.com, which currently has over 20,000 workspaces, I always install the new version of Application Express into it's own tablespace.  I do not install Application Express into the default SYSAUX tablespace.  Application Express 3.1 was installed into tablespace APEX_REL31.  When I recently upgraded to Application Express 3.2, and after we ran successfully for a couple days, it was easy to clean up the old Application Express 3.1 by issuing:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;DROP USER FLOWS_030100 CASCADE;&lt;br /&gt;DROP TABLESPACE APEX_REL31 INCLUDING CONTENTS AND DATAFILES;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That's it!  The privileged database user from the previous version is gone.  All of the space on disk is reclaimed.  And the newer version of Application Express 3.2 in APEX_030200 hums along just fine.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note:  There is one schema installed with Application Express, FLOWS_FILES, which persists across version upgrades.  The sole purpose of this schema is to maintain uploaded files.  You should &lt;span style="font-weight: bold;"&gt;never &lt;/span&gt;manually remove this schema unless you want to remove every facet of Oracle Application Express from your database.  And if you really wanted to remove every trace of Application Express, I'd recommend using the &lt;a href="http://download.oracle.com/docs/cd/E14373_01/install.32/e13366/trouble.htm#BABEBHBE"&gt;apxremov.sql&lt;/a&gt; script anyway.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Considerations when dropping on Database 11g&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you're using Application Express with Oracle Database 11g (11.1.0.6 or greater), undoubtedly you had to &lt;a href="http://download.oracle.com/docs/cd/E14373_01/install.32/e13366/db_install.htm#CIHIDCCE"&gt;enable Network Services&lt;/a&gt; so Application Express could send e-mail, use Web Services, etc.  If you didn't do this, then you'll encounter errors like "ORA-24247: network access denied by access control list (ACL)" when APEX attempts to send e-mail or access any other network resource.&lt;br /&gt;&lt;br /&gt;One important caveat to the instructions above - if you created an ACL for FLOWS_030100 (Application Express 3.1) and granted connect privileges to FLOWS_030100, after you upgrade to Application Express 3.2 , &lt;a href="http://download.oracle.com/docs/cd/E14373_01/install.32/e13366/db_install.htm#CIHIDCCE"&gt;grant these same connect privileges&lt;/a&gt; on the existing ACL to APEX_030200, and you drop database user FLOWS_030100, the Network ACL will contain a dangling reference to FLOWS_030100 and will be invalid.  What this means is that if you're running along just fine with an upgraded Application Express 3.2 and you drop FLOWS_030100, your delivery of e-mail may no longer work.  Users will see error messages like "ORA-24247: network access denied by access control list (ACL)" in APEX_MAIL_LOG.MAIL_SEND_ERROR.&lt;br /&gt;&lt;br /&gt;This situation happened to me over the weekend.  After Application Express 3.2 was running for a month on our internal instance, the old FLOWS_030100 database user was finally dropped.  Numerous issues were raised on Monday morning by workspace owners who said they could no longer send e-mail and they were seeing the error message "ORA-24247: network access denied by access control list (ACL)" in APEX_MAIL_LOG.MAIL_SEND_ERROR.&lt;br /&gt;&lt;br /&gt;The only way I've discovered to rectify this situation is to manually drop the ACL reference to FLOWS_030100.  I connected as SYS in SQL*Plus and ran:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;exec dbms_network_acl_admin.delete_privilege('power_users.xml','FLOWS_030100',TRUE,'connect');&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This underlying database issue, with the ACL privileges not being dropped when a database user is dropped, was filed as Bug 7493477 and is targeted to be fixed in Database 11gR2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-3442768929354917741?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/3442768929354917741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=3442768929354917741' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3442768929354917741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3442768929354917741'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/04/cleaning-up.html' title='Cleaning Up'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5196981209406709385</id><published>2009-03-06T16:01:00.002-05:00</published><updated>2009-03-06T16:06:41.553-05:00</updated><title type='text'>Oracle Application Express in the cloud</title><content type='html'>You may have heard a thing or two about cloud computing.  Jason Straub, from the Oracle Application Express development team, recently blogged about using Oracle Application Express in the cloud - and how you can run APEX in the cloud for as cheap as 20 cents USD / hour.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jastraub.blogspot.com/2009/03/test-drive-oracle-application-express.html"&gt;http://jastraub.blogspot.com/2009/03/test-drive-oracle-application-express.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There's a little bit of setup to use the Amazon.com Elastic Compute Cloud, but once that's behind you, you can easily stand up your own Oracle database in the cloud for a tiny amount of money.  And, in my opinion, this just further demonstrates how the browser-based Oracle Application Express hosted development and deployment environment is so well suited to cloud computing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5196981209406709385?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5196981209406709385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5196981209406709385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5196981209406709385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5196981209406709385'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/03/oracle-application-express-in-cloud.html' title='Oracle Application Express in the cloud'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-3668547800408529486</id><published>2009-02-27T16:46:00.003-05:00</published><updated>2009-02-27T16:51:13.083-05:00</updated><title type='text'>Oracle Application Express 3.2 released</title><content type='html'>Today, Oracle Application Express 3.2 was made available for download off of the Oracle Technology Network.&lt;br /&gt;&lt;br /&gt;If you go to &lt;a href="http://apex.oracle.com"&gt;http://apex.oracle.com&lt;/a&gt;, you'll find links to:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The link to download Oracle Application Express 3.2&lt;/li&gt;&lt;li&gt;The list of new features in Oracle Application Express 3.2&lt;/li&gt;&lt;li&gt;New Oracle By Examples, including a an Oracle Forms to Oracle APEX OBE and a soon-to-be-released security OBE.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Thanks to the Oracle Application Express community for your continued support, ideas and enthusiasm.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-3668547800408529486?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/3668547800408529486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=3668547800408529486' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3668547800408529486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/3668547800408529486'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/02/oracle-application-express-32-released.html' title='Oracle Application Express 3.2 released'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-1713205007019094542</id><published>2009-02-20T09:10:00.026-05:00</published><updated>2011-10-27T12:24:16.605-04:00</updated><title type='text'>Make all of your APEX applications run a bit faster</title><content type='html'>&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;See the important update below &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Interested in making your APEX applications run faster?  I know this seems like an impossible and astonishing feat, and you'll soon be approaching page view execution times of zero, but you can squeeze even a little more throughput and scalability with this one small exercise.  And this shouldn't cost you an extra cent.&lt;br /&gt;&lt;br /&gt;As a lot of people know already, Oracle Application Express is essentially one big SQL and PL/SQL program.  "Porting" of Oracle Application Express to other platforms is not necessary.  It installs via SQL*Plus.  It runs where PL/SQL does.  And PL/SQL, truly, is a write-once-run-everywhere platform.&lt;br /&gt;&lt;br /&gt;So how do you make a PL/SQL program run faster?  Through native compilation of PL/SQL, of course.  When you compile a module in PL/SQL, you are converting it to an intermediate form named system code (or bytecode).  At runtime, this system code is interpreted.  Execution of this program would be much faster if it were compiled natively and the interpretation step was bypassed altogether.  This is analogous to the old days of taking an interpreted BASIC program and compiling it to a native program.&lt;br /&gt;&lt;br /&gt;An excellent description of PL/SQL native compilation can be found in &lt;a href="http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/tuning.htm#BCGFAJCD"&gt;Oracle Database PL/SQL Language Reference&lt;/a&gt;.  When PL/SQL native compilation was introduced in Oracle Database 9iR1 and 9iR2, I found it to be complicated and involved, and I think I was successful getting a small program to ncomp once (and only once).  &lt;a href="http://www.dynamicpsp.com/%21go?ln=nfaq&amp;amp;faq=FAQ5"&gt;Here&lt;/a&gt; is the explanation from some poor guy who figured out all the steps to do this in 9iR2 on Windows.  But in Oracle Database 11gR1, this is downright trivial.&lt;br /&gt;&lt;br /&gt;My test below was done in an Oracle Database 11gR1 11.1.0.6 on Oracle Enterprise Linux on VMWare Server on a Windows Vista x-64 host.  With all those layers of software, the performance difference at runtime could still be easily observed.  Also, I did this with the soon-to-be-released Application Express 3.2.  Wherever you see APEX_030200, replace it with the database user of your specific APEX release (e.g., APEX 3.1 = FLOWS_030100).&lt;br /&gt;&lt;br /&gt;The database view DBA_PLSQL_OBJECT_SETTINGS provides information about the compiler settings for all stored objects in the database.  Connect as SYS via SQL*Plus or SQL Developer and run the following query (remembering again to replace 'APEX_030200' if you're not running Application Express 3.2):&lt;br /&gt;&lt;br /&gt;&lt;textarea class="sql" name="code"&gt;column plsql_optimize_level format 999&lt;br /&gt;column plsql_code_type format a20&lt;br /&gt;select count(*), o.object_type, s.plsql_optimize_level, s.plsql_code_type&lt;br /&gt;  from dba_objects o, dba_plsql_object_settings s&lt;br /&gt; where o.object_name = s.name&lt;br /&gt;   and o.owner = 'APEX_030200'&lt;br /&gt;   and s.owner = o.owner&lt;br /&gt; group by o.object_type, s.plsql_optimize_level, s.plsql_code_type&lt;br /&gt; order by 2 asc&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;On my instance this returned:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;&lt;br /&gt;COUNT(*) OBJECT_TYPE         PLSQL_OPTIMIZE_LEVEL PLSQL_CODE_TYPE&lt;br /&gt;---------- ------------------- -------------------- --------------------&lt;br /&gt;      12 FUNCTION                               2 INTERPRETED&lt;br /&gt;     370 PACKAGE                                2 INTERPRETED&lt;br /&gt;     362 PACKAGE BODY                           2 INTERPRETED&lt;br /&gt;      19 PROCEDURE                              2 INTERPRETED&lt;br /&gt;       1 TABLE                                  2 INTERPRETED&lt;br /&gt;     366 TRIGGER                                2 INTERPRETED&lt;br /&gt;       4 TYPE                                   2 INTERPRETED&lt;br /&gt;&lt;br /&gt;7 rows selected.&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;All PL/SQL objects are interpreted and have a PL/SQL optimization level of 2.  You can alter the PL/SQL compiler optimization level via &lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/initparams184.htm#REFRN10255"&gt;PLSQL_OPTIMIZER_LEVEL&lt;/a&gt;, but I encountered runtime errors in Application Express when I natively compiled with an optimizer level of 3.  I don't know why, but I'm saving that for another day.&lt;br /&gt;&lt;br /&gt;Recompiling all of these objects via native compilation can be done with three easy statements.  Note:  You should not do this while the APEX applications are actively being used, as these steps will recompile all of the objects in the schema and you could encounter object contention issues.  Connect as SYS in SQL*Plus and run:&lt;br /&gt;&lt;br /&gt;&lt;textarea class="sql" name="code"&gt;alter session set plsql_optimize_level = 2;&lt;br /&gt;alter session set plsql_code_type = native;&lt;br /&gt;exec dbms_utility.compile_schema('APEX_030200');&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That's it!  If you execute the query above, you should now see something like:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;COUNT(*) OBJECT_TYPE         PLSQL_OPTIMIZE_LEVEL PLSQL_CODE_TYPE&lt;br /&gt;---------- ------------------- -------------------- --------------------&lt;br /&gt;      12 FUNCTION                               2 NATIVE&lt;br /&gt;     370 PACKAGE                                2 NATIVE&lt;br /&gt;     362 PACKAGE BODY                           2 NATIVE&lt;br /&gt;      19 PROCEDURE                              2 NATIVE&lt;br /&gt;       1 TABLE                                  2 NATIVE&lt;br /&gt;     366 TRIGGER                                2 NATIVE&lt;br /&gt;       4 TYPE                                   2 NATIVE&lt;br /&gt;&lt;br /&gt;7 rows selected.&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you encounter errors and you want to revert back to what you had, run:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql;toolbar:false;"&gt;alter session set plsql_optimize_level = 2;&lt;br /&gt;alter session set plsql_code_type = interpreted;&lt;br /&gt;exec dbms_utility.compile_schema('APEX_030200');&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But I think you'll be pleasantly surprised with the results and have no desire to revert back.  In Database 11gR1, this has become a downright trivial exercise.  And faster page views means greater throughput which means greater scalability on equivalent hardware.  That's both green and economical.&lt;br /&gt;&lt;br /&gt;Lastly, you might wonder if the hosted instance of Application Express at &lt;a href="http://apex.oracle.com/"&gt;http://apex.oracle.com&lt;/a&gt; is running with natively compiled PL/SQL.  It's not, but after we formally release Application Express 3.2, it will be.  There's no reason not to.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Important Update&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;08-APR-2009:  There's nothing like actually using and testing these features on a large-scale system.  A few weeks ago, I had natively compiled the APEX engine on apex.oracle.com.  But just this past week, we had to switch this back to interpreted.  Some unexplained ORA-600 errors were being encountered which is being actively researched by the database development team.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-1713205007019094542?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/1713205007019094542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=1713205007019094542' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1713205007019094542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/1713205007019094542'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/02/make-all-of-your-apex-applications-run.html' title='Make all of your APEX applications run a bit faster'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5336882516668126707</id><published>2009-02-17T20:13:00.003-05:00</published><updated>2009-02-17T20:30:51.132-05:00</updated><title type='text'>Carl Backstrom - Oracle ACE</title><content type='html'>Thanks to the work of Sharon on our team, she was able fulfill one of the desires Carl Backstrom had expressed a couple times.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.oracle.com/technology/community/oracle_ace/index.html"&gt;Oracle ACE program&lt;/a&gt; was "designed to recognize and reward members of the Oracle Technology and Applications communities for their contributions to those communities. These individuals are technically proficient (when applicable) and willingly share their knowledge and experiences."  This really epitomized Carl - he was always ready and willing to share his vast knowledge with any one.&lt;br /&gt;&lt;br /&gt;Well, as luck would have it, the folks at the Oracle Technology Network decided that Oracle employees could no longer be awarded the ACE designation.  And that bothered Carl a little bit, as he was a very active contributor to the community every day.  It just would have been nice to receive that designation.&lt;br /&gt;&lt;br /&gt;Thanks to Sharon's suggestion, this has now been achieved:  &lt;a href="http://forums.oracle.com/forums/profile.jspa?userID=354238"&gt;http://forums.oracle.com/forums/profile.jspa?userID=354238&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5336882516668126707?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5336882516668126707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5336882516668126707' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5336882516668126707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5336882516668126707'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/02/carl-backstrom-oracle-ace.html' title='Carl Backstrom - Oracle ACE'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-2016924691496278677</id><published>2009-02-11T16:03:00.003-05:00</published><updated>2009-02-11T16:08:54.492-05:00</updated><title type='text'>apex.oracle.com upgraded to Application Express 3.2</title><content type='html'>Today (Wednesday, 11-FEB-2009) I upgraded apex.oracle.com to Application Express 3.2.0.00.21.  As our long time customers know, this is one of the last milestones in our cycle prior to production release.&lt;br /&gt;&lt;br /&gt;You can go &lt;a href="http://www.oracle.com/technology/products/database/application_express/html/3.2_new_features.html"&gt;here &lt;/a&gt;for a brief introduction to the new features in Application Express 3.2.  As you'll see, there are two primary themes - Forms Conversion and security.  The Application Express 3.2 documentation is not staged yet, but the online help/documentation is current for APEX 3.2.&lt;br /&gt;&lt;br /&gt;If you encounter odd behavior or you feel that something was not properly upgraded in your application, please feel free to report it on the &lt;a href="http://forums.oracle.com/forums/forum.jspa?forumID=137"&gt;APEX OTN discussion forum&lt;/a&gt;.  We will watch this closely.&lt;br /&gt;&lt;br /&gt;Thank you for all of your support.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-2016924691496278677?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/2016924691496278677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=2016924691496278677' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/2016924691496278677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/2016924691496278677'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2009/02/apexoraclecom-upgraded-to-application.html' title='apex.oracle.com upgraded to Application Express 3.2'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-5450116295644421053</id><published>2008-11-21T09:38:00.005-05:00</published><updated>2008-11-21T09:46:45.684-05:00</updated><title type='text'>Change is Coming....</title><content type='html'>Change is coming...and no, I'm not referring to the forthcoming change in Washington.  I'm referring to &lt;a href="http://apex.oracle.com"&gt;Oracle Application Express&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Since the first supported release of Application Express (Oracle HTML DB 1.5), Application Express has been delivered as a supported feature of the Oracle Database, supporting database releases 9.2.0.3 and higher.  So even though Oracle HTML DB 1.5 was delivered as a feature of the Oracle Database Release 10gR1, a customer could actually download it from the &lt;a href="http://otn.oracle.com"&gt;Oracle Technology Network&lt;/a&gt;, install it in their Oracle Database 9iR2 9.2.0.3, and be in a supported configuration.&lt;br /&gt;&lt;br /&gt;For the forthcoming release of Oracle Application Express 3.2, which introduces &lt;a href="http://www.oracle.com/technology/products/forms/index.html"&gt;Oracle Forms&lt;/a&gt; Conversion, the minimum database version will continue to be 9.2.0.3.  But for Oracle Application Express 4.0, the minimum database version will be Oracle Database 10gR2 10.2.0.x - possibly even 10.2.0.4.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-5450116295644421053?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/5450116295644421053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=5450116295644421053' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5450116295644421053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/5450116295644421053'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2008/11/change-is-coming.html' title='Change is Coming....'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-8042015863765479561</id><published>2008-11-13T21:55:00.003-05:00</published><updated>2008-11-13T22:18:14.225-05:00</updated><title type='text'>What's up, DOAG?</title><content type='html'>It's pronounced "what's up, dog?"...or if you're a &lt;a href="http://www.clevelandbrowns.com"&gt;Cleveland Browns&lt;/a&gt; fan like I am, it's pronounced "what's up, Dawg?" (my thanks to &lt;a href="http://blogs.oracle.com/sergio/"&gt;Sergio&lt;/a&gt; for this play on words).&lt;br /&gt;&lt;br /&gt;The conference of the German Oracle User's Groups, Deutsche Oracle-Anwendergruppe 2008 Konferenz + Ausstellung (&lt;a href="http://www.doag.org/"&gt;DOAG&lt;/a&gt;), is happening Monday 01-DEC-2008 through Wednesday 03-DEC-2008 in Nürnberg, Germany.  Here is the conference program in &lt;a href="http://www.doag.org/konferenz/doag/2008/?content=programm"&gt;German&lt;/a&gt; and &lt;a href="http://www.doag.org/en/konferenz/doag/2008/?content=programm"&gt;English&lt;/a&gt;.  There are a fair number of presentations about Oracle Application Express, including mine about what's coming new in Oracle Application Express in 2009.&lt;br /&gt;&lt;br /&gt;I'm looking forward to the entire conference.  Maybe some of the local attendees can take us on a walking tour of the Nürnberger Christkindlesmarkt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-8042015863765479561?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/8042015863765479561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=8042015863765479561' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8042015863765479561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8042015863765479561'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2008/11/whats-up-doag.html' title='What&apos;s up, DOAG?'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-8781229704527810076</id><published>2008-11-01T18:55:00.005-04:00</published><updated>2008-11-01T20:15:03.848-04:00</updated><title type='text'>Carl Backstrom Memorial Announcement</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;Please join the family in celebrating the life of Carl Backstrom&lt;br /&gt;&lt;br /&gt;on Thursday, the sixth of November&lt;br /&gt;&lt;br /&gt;two thousand and eight&lt;br /&gt;&lt;br /&gt;at one o'clock in the afternoon&lt;br /&gt;&lt;br /&gt;Orange Terrace Park&lt;br /&gt;&lt;br /&gt;20010 Orange Terrace Park Parkway&lt;br /&gt;&lt;br /&gt;Riverside, CA 92508&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;In lieu of flowers the family has set up a Memorial Fund&lt;br /&gt;in behalf of Carl's daughter, Destany.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Donations to Carl's Memorial Fund can be made several ways:&lt;br /&gt;&lt;br /&gt;Domestic wire transfers&lt;br /&gt;Account Number 152460903&lt;br /&gt;Citibank ABA Number 322271724&lt;br /&gt;International wire transfers SWIFT Code: CITI US 33&lt;br /&gt;Checks&lt;br /&gt;Make payable to Susan Bailey (Carl's Mother)&lt;br /&gt;Address: 3395 S. Jones Blvd #403&lt;br /&gt;Las Vegas, NV 89146&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;“And in the end, it's not the years in your life that count.&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;It's the life in your years.”&lt;/span&gt; - Abraham Lincoln&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a title="View Carl Backstrom Memorial Annoucement document on Scribd" href="http://www.scribd.com/doc/7687449/Carl-Backstrom-Memorial-Annoucement" style="text-align:left; margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;Carl Backstrom Memorial Annoucement&lt;/a&gt; &lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_192414314572126" name="doc_192414314572126" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="100%"&gt;  &lt;param name="movie" value="http://documents.scribd.com/ScribdViewer.swf?document_id=7687449&amp;access_key=key-2nj0dfvn0r7f7psr2ijr&amp;page=&amp;version=1&amp;auto_size=true&amp;viewMode="&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;      &lt;embed src="http://documents.scribd.com/ScribdViewer.swf?document_id=7687449&amp;access_key=key-2nj0dfvn0r7f7psr2ijr&amp;page=&amp;version=1&amp;auto_size=true&amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_192414314572126_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle"  height="500" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt; &lt;div style="font-size: 10px; font-family: tahoma,arial; text-align: left; height: 26px; padding-top: 2px;width:100%;"&gt; &lt;a href="http://www.scribd.com/upload" style="text-decoration: underline;"&gt;Get your own&lt;/a&gt; at Scribd or &lt;a href="http://www.scribd.com/browse" style="text-decoration: underline;"&gt;explore&lt;/a&gt; others:   &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-8781229704527810076?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/8781229704527810076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=8781229704527810076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8781229704527810076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/8781229704527810076'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2008/11/carl-backstrom-memorial-announcement.html' title='Carl Backstrom Memorial Announcement'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12214002.post-6838387423029409137</id><published>2008-11-01T08:53:00.006-04:00</published><updated>2008-11-01T09:16:18.144-04:00</updated><title type='text'>Open Source Web Design</title><content type='html'>Maybe everyone else on the planet knew about &lt;a href="http://www.oswd.org"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;OSWD&lt;/span&gt;&lt;/a&gt; other than me.  Regardless, here goes...&lt;br /&gt;&lt;br /&gt;My brother-in-law, Matt Wagner, recently asked me to help him with his Web site.  This was an interesting proposition, because I have not invested that much time learning about proper Web design (I never had to - I'm a database guy and we always had &lt;a href="http://carlback.blogspot.com/"&gt;Carl&lt;/a&gt; and &lt;a href="http://marcsewtz.blogspot.com/"&gt;Marc&lt;/a&gt; for that kind of stuff).  So I took this as an opportunity to actually learn something and I embraced the challenge.  My brother-in-law already had his domain name, and he had a rough idea about the layout and the content that he wanted to put on his Web site, but he didn't know the first thing about HTML or how to propagate this information out to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;GoDaddy&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The last conversation I had with Carl was a week ago and I wanted to get his feedback about what I had done with Matt's Web site.  &lt;a href="http://www.wagwrites.com/matt/mattwagner.html"&gt;Here&lt;/a&gt; is what pointed Carl to.  I was so proud of myself, having figured out how to make some practical use of styles and also my over-the-top use of the effects from &lt;a href="http://mootools.net/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;MooTools&lt;/span&gt;&lt;/a&gt;.  Let me tell you - Carl laughed and laughed.  He said the colors were odd, there was no contrast with the font and the background, the effects were funny, and he encouraged me not to use Serif fonts ("just not in style").  He also told me, with a chuckle, that I should start practicing &lt;a href="http://jquery.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;jQuery&lt;/span&gt;&lt;/a&gt; and forget &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;MooTools&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Carl did point me to the&lt;a href="http://www.oswd.org/"&gt; Open Source Web Design&lt;/a&gt; site and told me to pick one.  For someone like me, who is artistically and graphically challenged, this site is a wealth of excellent templates and ideas.  Needless to say, my &lt;a href="http://www.wagwrites.com"&gt;second attempt at this&lt;/a&gt;, which we're continuing to iterate upon, is much, much better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12214002-6838387423029409137?l=joelkallman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelkallman.blogspot.com/feeds/6838387423029409137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12214002&amp;postID=6838387423029409137' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6838387423029409137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12214002/posts/default/6838387423029409137'/><link rel='alternate' type='text/html' href='http://joelkallman.blogspot.com/2008/11/open-source-web-design.html' title='Open Source Web Design'/><author><name>Joel R. Kallman</name><uri>http://www.blogger.com/profile/01915290758512999160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Xzek4R5SEds/TFatzOyo14I/AAAAAAAAAts/wFjfdOh_v3I/S220/JKallman_LinkedIn.png'/></author><thr:total>3</thr:total></entry></feed>
