<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0"><id>tag:blogger.com,1999:blog-21169145</id><updated>2024-10-10T00:50:29.159+02:00</updated><category term="APEX"/><category term="XE"/><category term="SQLDeveloper"/><category term="PL/SQL"/><category term="Quest Code Tester  for Oracle"/><category term="AJAX"/><category term="GIS"/><category term="Google Chart API"/><category term="Google Maps API"/><category term="Java"/><category term="JavaScript"/><category term="Materialized views"/><category term="Oracle Drive"/><category term="RuleGen"/><title type="text">Jornica</title><subtitle type="html">He's a nice guy but doesn't get paid for it</subtitle><link href="http://jornica.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default?alt=atom&amp;redirect=false" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/" rel="alternate" type="text/html"/><link href="http://pubsubhubbub.appspot.com/" rel="hub"/><link href="http://www.blogger.com/feeds/21169145/posts/default?alt=atom&amp;start-index=26&amp;max-results=25&amp;redirect=false" rel="next" type="application/atom+xml"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><generator uri="http://www.blogger.com" version="7.00">Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><entry><id>tag:blogger.com,1999:blog-21169145.post-2961341419914915704</id><published>2012-11-29T21:59:00.000+01:00</published><updated>2012-11-29T21:59:54.428+01:00</updated><title type="text">Book review: Oracle APEX Best Practices</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://cdn2.cf.packtpub.com/sites/default/files/imagecache/productview_larger/4002EN_Oracle%20APEX%20Best%20Practices.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="213" width="170" src="http://cdn2.cf.packtpub.com/sites/default/files/imagecache/productview_larger/4002EN_Oracle%20APEX%20Best%20Practices.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;blockquote&gt;Read my book &lt;a href="http://technology.amis.nl/2012/11/29/book-review-oracle-apex-best-practices/"&gt;review&lt;/a&gt; of Oracle APEX Best practices.
&lt;/blockquote&gt;</content><link href="http://jornica.blogspot.com/feeds/2961341419914915704/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/2961341419914915704" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/2961341419914915704" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/2961341419914915704" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2012/11/book-review-oracle-apex-best-practices.html" rel="alternate" title="Book review: Oracle APEX Best Practices" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-8192733781223269934</id><published>2012-09-28T14:15:00.001+02:00</published><updated>2012-09-28T14:17:29.452+02:00</updated><title type="text">Get an eBook for free!</title><content type="html">@packtpub publishes its 1000th title. Sign up or login at http://www.packtpub.com and receive a free eBook! #AnOfferYouCannotRefuse</content><link href="http://jornica.blogspot.com/feeds/8192733781223269934/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/8192733781223269934" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/8192733781223269934" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/8192733781223269934" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2012/09/get-ebook-for-free.html" rel="alternate" title="Get an eBook for free!" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-9180434542385160287</id><published>2012-07-22T16:20:00.001+02:00</published><updated>2012-07-22T16:20:14.721+02:00</updated><title type="text">SOA Suite 11g advanced training experiences</title><content type="html">Read my report from Oracle Fusion Middleware Summer Camps in Munich: 
&lt;a href="http://technology.amis.nl/2012/07/22/soa-suite-11g-advanced-training-experiences/"&gt;SOA Suite 11g advanced training&lt;/a&gt; experiences.</content><link href="http://jornica.blogspot.com/feeds/9180434542385160287/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/9180434542385160287" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/9180434542385160287" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/9180434542385160287" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2012/07/soa-suite-11g-advanced-training.html" rel="alternate" title="SOA Suite 11g advanced training experiences" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-4861049097332556589</id><published>2011-08-03T21:50:00.000+02:00</published><updated>2012-07-22T21:54:25.318+02:00</updated><title type="text">Screen scraping using Google Documents in a minute or less…</title><content type="html">Read my blog post &lt;a href="http://technology.amis.nl/2011/08/03/screenscraping-using-google-documents-in-a-minute-or-less/"&gt;Screen scraping using Google Documents in a minute or less…&lt;/a&gt;</content><link href="http://jornica.blogspot.com/feeds/4861049097332556589/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/4861049097332556589" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/4861049097332556589" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/4861049097332556589" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2011/08/screen-scraping-using-google-documents.html" rel="alternate" title="Screen scraping using Google Documents in a minute or less…" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-5887586826628254070</id><published>2011-01-10T00:00:00.000+01:00</published><updated>2012-07-22T21:59:01.635+02:00</updated><title type="text">Enabling SNMP traps in the Oracle Service Bus</title><content type="html">Read my blog post &lt;a href="http://technology.amis.nl/2011/01/10/enabling-snmp-traps-in-the-oracle-service-bus/"&gt;Enabling SNMP traps in the Oracle Service Bus&lt;/a&gt;.</content><link href="http://jornica.blogspot.com/feeds/5887586826628254070/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/5887586826628254070" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/5887586826628254070" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/5887586826628254070" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2011/01/enabling-snmp-traps-in-oracle-service.html" rel="alternate" title="Enabling SNMP traps in the Oracle Service Bus" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-4219019486186866730</id><published>2010-05-18T22:13:00.000+02:00</published><updated>2012-07-22T22:03:45.457+02:00</updated><title type="text">Hands-on: Run-time datasource selection with JCA adapters in the Oracle Service Bus 11g</title><content type="html">Read my blog post &lt;a href="http://technology.amis.nl/2010/05/18/hands-on-run-time-datasource-selection-with-jca-adapters-in-the-oracle-service-bus-11g-2/"&gt;Hands-on: Run-time datasource selection with JCA adapters in the Oracle Service Bus 11g&lt;/a&gt;.</content><link href="http://jornica.blogspot.com/feeds/4219019486186866730/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/4219019486186866730" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/4219019486186866730" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/4219019486186866730" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2010/05/hands-on-run-time-datasource-selection.html" rel="alternate" title="Hands-on: Run-time datasource selection with JCA adapters in the Oracle Service Bus 11g" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-5545386271922841772</id><published>2009-09-24T23:06:00.000+02:00</published><updated>2012-07-22T22:12:25.338+02:00</updated><title type="text">Starting WebLogic managed servers without providing username and password manually – SOA Suite 11g tip</title><content type="html">Read my blog post &lt;a href="http://technology.amis.nl/2009/09/24/starting-managed-servers-without-providing-username-and-password-manually/"&gt;Starting WebLogic managed servers without providing username and password manually – SOA Suite 11g tip&lt;/a&gt;</content><link href="http://jornica.blogspot.com/feeds/5545386271922841772/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/5545386271922841772" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/5545386271922841772" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/5545386271922841772" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2009/09/starting-weblogic-managed-servers.html" rel="alternate" title="Starting WebLogic managed servers without providing username and password manually – SOA Suite 11g tip" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-895837007119156970</id><published>2009-02-02T21:53:00.002+01:00</published><updated>2009-02-02T21:58:57.083+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APEX"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><title type="text">The EMP mindmap</title><content type="html">&lt;p&gt;By accident, I stumbled upon a &lt;a href="http://code.google.com/p/js-mindmap/"&gt;Java script library&lt;/a&gt; for generating &lt;a href="http://en.wikipedia.org/wiki/Mind_map"&gt;mind maps&lt;/a&gt;. But instead of having a  static diagram, this Java script enabled one is dynamic, you can move nodes, you can zoom in or out to another level of nodes. A very nice graphical way of presenting hierarchical data. For example, who's managing who in Oracle's &lt;code&gt;EMP&lt;/code&gt; table as shown below. Come on, grab your mouse and start moving and clicking, it's alive!&lt;/p&gt;&lt;iframe src="http://apex.oracle.com/pls/otn/f?p=jsexamples:mindmap"  marginheight="0px" marginwidth="0px" title="Mindmap" frameborder="0" height="600" width="900"&gt;&lt;/iframe&gt;&lt;p&gt;Here's the recipe to build such an application.&lt;/p&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Start with downloading the source of the Google code project &lt;a href="http://code.google.com/p/js-mindmap/"&gt;js-mindmap&lt;/a&gt;. In the sources you will several Java script libraries, and an example file &lt;code&gt;js-mindmap.html&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;In APEX upload the Java script libraries add &lt;code&gt;&lt;javascript&gt;&lt;/code&gt;references from the header section to these libraries.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Add a PL/SQL region, which generates the hierarchy and will be converted in a diagram:&lt;/p&gt;&lt;pre&gt;&amp;lt;canvas id="cv"&amp;gt;&amp;lt;/canvas&amp;gt;&lt;br /&gt;&amp;lt;div id="js-mindmap"&amp;gt;&lt;br /&gt;  &amp;lt;a&amp;gt;KING&amp;lt;/a&amp;gt;&lt;br /&gt;  &amp;lt;ul&amp;gt;&lt;br /&gt;  &amp;lt;li&amp;gt;BLAKE&lt;br /&gt;  &amp;lt;ul&amp;gt;&lt;br /&gt;   &amp;lt;li&amp;gt;ALLEN&amp;lt;/li&amp;gt;&lt;br /&gt;   ...&lt;br /&gt;   &amp;lt;li&amp;gt;JAMES&amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;/ul&amp;gt;&lt;br /&gt;  ...&lt;br /&gt; &amp;lt;/ul&amp;gt;&lt;br /&gt; &amp;lt;/li&amp;gt; &lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;p&gt;For example, the &lt;a href="http://jornica.googlepages.com/show_emp_tree.zip"&gt;function&lt;/a&gt; &lt;code&gt;show_emp_tree&lt;/code&gt; returns the html code for the &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; element.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Note that when you replace the &lt;code&gt;EMP&lt;/code&gt; table by &lt;code&gt;OEHR_EMPLOYEES&lt;/code&gt; table the animation will become very slow due to the increase of nodes and links. Also the js-mindmap project is still in development. But anyway it's fun!&lt;/p&gt;</content><link href="http://jornica.blogspot.com/feeds/895837007119156970/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/895837007119156970" rel="replies" title="4 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/895837007119156970" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/895837007119156970" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2009/02/emp-mindmap.html" rel="alternate" title="The EMP mindmap" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-7626265107910238597</id><published>2008-07-30T22:51:00.000+02:00</published><updated>2012-07-22T22:11:53.337+02:00</updated><title type="text">Database upgrade apex.oracle.com</title><content type="html">Read my blog post &lt;a href="http://technology.amis.nl/2008/07/30/database-upgrade-apexoraclecom/"&gt;Database upgrade apex.oracle.com&lt;/a&gt;.</content><link href="http://jornica.blogspot.com/feeds/7626265107910238597/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/7626265107910238597" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/7626265107910238597" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/7626265107910238597" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2012/07/database-upgrade-apexoraclecom.html" rel="alternate" title="Database upgrade apex.oracle.com" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-6006926360754898703</id><published>2008-05-18T22:59:00.002+02:00</published><updated>2008-05-19T20:50:36.289+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="PL/SQL"/><title type="text">To b:\ or not to B:\</title><content type="html">&lt;p&gt;Recently, I ran into a small issue with Java permissions. Starting point is the &lt;a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:439619916584" target="_blank"&gt;DirList&lt;/a&gt; Java procedure to list the content of an OS directory. Here is the code to get started (executed as &lt;code&gt;SCOTT&lt;/code&gt;):&lt;/p&gt;&lt;pre&gt;CREATE global TEMPORARY TABLE DIR_LIST ( filename VARCHAR2(255) ) ON&lt;br /&gt; COMMIT&lt;br /&gt;  DELETE rows&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "DirList"&lt;br /&gt;AS&lt;br /&gt; import java.io.*;&lt;br /&gt; import java.sql.*;&lt;br /&gt; public class DirList { &lt;br /&gt;  public static void getList(String directory) throws SQLException { &lt;br /&gt;    File path = NEW File( directory );&lt;br /&gt;    String[]&lt;br /&gt;    list = path.list();&lt;br /&gt;    String element;&lt;br /&gt;    for(INT i = 0; i &lt; list.length;  i++) { &lt;br /&gt;      element = list[i];&lt;br /&gt;      #sql { INSERT INTO DIR_LIST (FILENAME) VALUES (:element) };&lt;br /&gt;    } &lt;br /&gt;  } &lt;br /&gt; }&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE PROCEDURE get_dir_list ( p_directory IN VARCHAR2 ) &lt;br /&gt;  AS language java name 'DirList.getList( java.lang.String )'; &lt;br /&gt;/&lt;/pre&gt;&lt;p&gt;Don't grant the role &lt;code&gt;JAVAUSERPRIV&lt;/code&gt; but use a more granular option. Grant read permission to &lt;code&gt;SCOTT&lt;/code&gt; on the &lt;code&gt;d:&lt;/code&gt; drive:&lt;/p&gt;&lt;pre&gt;EXECUTE dbms_java.grant_permission( 'SCOTT', 'java.io.FilePermission','d:\','read' );&lt;/pre&gt;&lt;p&gt;Everything is in place now, time to run the procedure:&lt;/p&gt;&lt;pre&gt;EXECUTE get_dir_list('D:\');&lt;br /&gt;ORA-29532: Java call terminated by uncaught Java exception: java.security.AccessControlException: &lt;br /&gt;the Permission (java.io.FilePermission D:\ read) &lt;br /&gt;has not been granted by dbms_java.grant_permission to SchemaProtectionDomain(SCOTT|PolicyTableProxy(SCOTT))&lt;br /&gt;ORA-06512: at "SCOTT.GET_DIR_LIST", line 0&lt;br /&gt;ORA-06512: at line 2&lt;/pre&gt;&lt;p&gt;An error occurred, perhaps the directory did not exists? Executing a &lt;code&gt;dir D:\&lt;/code&gt; at the command prompt on the database server lists the files. The command prompt is not case sensitive, executing a &lt;code&gt;dir d:\&lt;/code&gt; returns the same listing. Perhaps  but &lt;code&gt;DBMS_JAVA.GRANT_PERMISSION&lt;/code&gt; is case sensitive?&lt;/p&gt;&lt;pre&gt;EXECUTE get_dir_list( 'd:\' );&lt;br /&gt;PL/SQL procedure successfully completed&lt;br /&gt;&lt;br /&gt;SELECT * FROM DIR_LIST&lt;br /&gt;/&lt;br /&gt;FILENAME&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;oracle&lt;br /&gt;RECYCLER&lt;br /&gt;System Volume Information&lt;br /&gt;&lt;/pre&gt;</content><link href="http://jornica.blogspot.com/feeds/6006926360754898703/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/6006926360754898703" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/6006926360754898703" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/6006926360754898703" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2008/05/to-b-or-not-to-b.html" rel="alternate" title="To b:\ or not to B:\" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-456654962478829615</id><published>2008-03-01T00:16:00.001+01:00</published><updated>2008-03-01T00:28:53.807+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APEX"/><category scheme="http://www.blogger.com/atom/ns#" term="XE"/><title type="text">APEX 3.1 On XE</title><content type="html">&lt;p&gt;On 29 Februari 2008, Oracle released Application Express 3.1 .  The page &lt;a href="http://www.oracle.com/technology/products/database/application_express/html/3.1_and_xe.html" target="_blank"&gt;Oracle Database XE and Application Express 3.1&lt;/a&gt; provides upgrade instructions .&lt;br /&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjck20XAySiRNMIAQsaCURPTcYwPVJ8HKY5iFqL9_XloFOiA1q23bAhulQ_DFkp8-D_lcf9fmxNvQXriIA5U8F9GrWcGaJqCRV-hm41aYc9xphCvcBbp0OnvQpaSJinrW6puyQQDQ/s1600-h/apex31onxe.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjck20XAySiRNMIAQsaCURPTcYwPVJ8HKY5iFqL9_XloFOiA1q23bAhulQ_DFkp8-D_lcf9fmxNvQXriIA5U8F9GrWcGaJqCRV-hm41aYc9xphCvcBbp0OnvQpaSJinrW6puyQQDQ/s320/apex31onxe.jpg" alt="" id="BLOGGER_PHOTO_ID_5172545384044546482" border="0" /&gt;&lt;/a&gt;</content><link href="http://jornica.blogspot.com/feeds/456654962478829615/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/456654962478829615" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/456654962478829615" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/456654962478829615" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2008/03/apex-31-on-xe.html" rel="alternate" title="APEX 3.1 On XE" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjck20XAySiRNMIAQsaCURPTcYwPVJ8HKY5iFqL9_XloFOiA1q23bAhulQ_DFkp8-D_lcf9fmxNvQXriIA5U8F9GrWcGaJqCRV-hm41aYc9xphCvcBbp0OnvQpaSJinrW6puyQQDQ/s72-c/apex31onxe.jpg" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-7739899025157181657</id><published>2008-02-13T20:55:00.006+01:00</published><updated>2008-02-27T22:03:16.409+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APEX"/><title type="text">APEX_GLOBAL_ARRAYS</title><content type="html">&lt;p&gt;When you are working with global package arrays (&lt;a href="http://download.oracle.com/docs/cd/B28359_01/appdev.111/b32258/api.htm#CHDICJDA%20"&gt;&lt;code&gt;apex_application.g_f01&lt;/code&gt; ... &lt;code&gt;apex_application.g_f50&lt;/code&gt;&lt;/a&gt;) in Oracle Application Express (APEX), the following package procedure &lt;code&gt;apex_global_arrays&lt;/code&gt; can help in reducing development time especially time spent in the bugs and features department.&lt;/p&gt;&lt;pre&gt;PACKAGE apex_global_arrays&lt;br /&gt;IS&lt;br /&gt;PROCEDURE print(maxlength  NUMBER DEFAULT 20);&lt;br /&gt;END;&lt;/pre&gt;&lt;p&gt;The procedure &lt;code&gt;print&lt;/code&gt; prints a HTML table with the contents of the arrays only if the page is run in debug mode. The parameter &lt;code&gt;maxlength&lt;/code&gt; truncates the value of each table cell at the given number. You can call the procedure in a separate &lt;code&gt;On Submit&lt;/code&gt; application process.  In this way the table is rendered even when succeeding &lt;code&gt;On Submit&lt;/code&gt; processes fail. Define once, execute  everywhere. And of course,  you can call it in &lt;code&gt;&lt;/code&gt;page process as well.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A picture says more than a thousand words. Below is an example of an updateable report based on the &lt;code&gt;emp&lt;/code&gt; table.&lt;/p&gt;&lt;img style="border-width: 0px;" alt="Updateable report on EMP table" src="http://lh6.google.com/jornica/R7NLIysr1-I/AAAAAAAAAEo/5-eEx0n7K5I/apex_global_arrays19" border="0" height="339" width="640" /&gt;&lt;br /&gt;&lt;p&gt;After pressing submit, the following output is shown. Compare the &lt;code&gt;g_f01&lt;/code&gt; array with the checkboxes above. The &lt;code&gt;g_f01&lt;/code&gt; array is not sparse like the &lt;code&gt;g_f08&lt;/code&gt; (commission) array.  Also, when an array value does not exists, no table cell is printed, i.e. &lt;code&gt;g_f05(9)&lt;/code&gt;; King does not have a manager.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img alt="HMTL table generated by apex_global_arrays.print" src="http://lh5.google.com/jornica/R7NLJisr1_I/AAAAAAAAAEw/8vxoEm28r20/apex_global_arrays211" border="0" height="248" width="640" /&gt;&lt;p&gt;The source can be found &lt;a href="http://jornica.googlepages.com/apex_global_arrays.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;h3&gt;Notes&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Due to the name change of HTMLDB into APEX the public synonyms &lt;code&gt;apex_application&lt;/code&gt; and &lt;code&gt;htmldb_application&lt;/code&gt; point both to the &lt;code&gt;wwv_flow&lt;/code&gt; package where the associative arrays are declared. The global package arrays are also known as referencing arrays in APEX documentation or associative arrays in the PL/SQL language.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;On &lt;a href="http://apex.oracle.com/"&gt;apex.oracle.com&lt;/a&gt; you have to enter the debug mode after the page is submitted in order to render the table. On Oracle XE, you  have to enter debug mode before submitting the page.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;You can install APEX_GLOBAL_ARRAYS in the parsing schema  or in a separate schema. You can find the parsing schema of your application on application definition page. When you choose for a separate schema you have to grant execute right to the parsing schema and create a (public) synonym for APEX_GLOBAL_ARRAYS.&lt;/li&gt;&lt;/ul&gt;</content><link href="http://jornica.blogspot.com/feeds/7739899025157181657/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/7739899025157181657" rel="replies" title="11 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/7739899025157181657" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/7739899025157181657" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2008/02/apexglobalarrays.html" rel="alternate" title="APEX_GLOBAL_ARRAYS" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-8651306454413861323</id><published>2008-01-27T16:15:00.001+01:00</published><updated>2008-01-27T16:15:15.664+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="RuleGen"/><title type="text">Introducing RuleGen</title><content type="html">&lt;p&gt;I've been working with &lt;a href="http://www.oracle.com/technology/products/headstart/index.html" target="_blank"&gt;CDM Ruleframe&lt;/a&gt; for a few years now. Recently I've attended a presentation about another framework focusing on business rules called &lt;a href="http://www.rulegen.com" target="_blank"&gt;RuleGen&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;RuleGen is a framework written in PL/SQL that generates&amp;nbsp; code to maintain data integrity constraints. Right now RuleGen implements table constraints, i.e. at most one president allowed in EMP,&amp;nbsp; and database constraints, i.e. every department has at least two employees. Enforcing a data integrity constraint is done in two steps. The first step is about administering the affected rows of a transaction (inserts, updates and deletes). The second step is validating the constraint against the affected rows. If the constraint is violated an exception is raised.&amp;nbsp; You can also say the first step is about WHEN&amp;nbsp; the constraint is validated and the second step is HOW the constraint is validated. &lt;/p&gt; &lt;p&gt;There are switches to influence the runtime behavior of RuleGen like the execution model: stop on the first constraint violation or continue after the first constraint violation in order to collect a list of constraint violations (like the message stack in CDM Ruleframe). It is also possible to defer checking (in contrary to immediate checking).&amp;nbsp; &lt;/p&gt; &lt;p&gt;A difference between CDM Ruleframe and RuleGen is the relationship with Oracle Designer. RuleGen is not integrated with Oracle Designer where CDM Ruleframe is. The definition (remember HOW and WHEN) of data integrity constraints is either done with SQL*Plus or with a small APEX application. Another&amp;nbsp; difference between RuleGen and CDM Ruleframe is there is no PL/SQL coding required with RuleGen. The definition of data integrity constraints is done in SQL queries completely.&lt;/p&gt; &lt;p&gt;In my opinion, the functionality of RuleGen looks very promising. Keep an eye on it!&lt;/p&gt;  </content><link href="http://jornica.blogspot.com/feeds/8651306454413861323/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/8651306454413861323" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/8651306454413861323" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/8651306454413861323" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2008/01/introducing-rulegen.html" rel="alternate" title="Introducing RuleGen" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-1871841616758262010</id><published>2008-01-10T23:58:00.001+01:00</published><updated>2008-01-10T23:58:44.683+01:00</updated><title type="text">Tagged!</title><content type="html">&lt;p&gt;&amp;nbsp;&lt;a href="http://garethroberts.blogspot.com/" target="_blank"&gt;Gareth Roberts&lt;/a&gt; tagged me. Thanks for the &lt;a href="http://oracleappslab.com/2008/01/07/orablog-tag/" target="_blank"&gt;invitation&lt;/a&gt;. And here are 8 things you did not know about me. &lt;/p&gt; &lt;ol&gt; &lt;li&gt;My nickname Jornica is derived from &lt;font color="#ff8000"&gt;Jor&lt;/font&gt;rit &lt;font color="#ff8000"&gt;Ni&lt;/font&gt;jssen. However five characters is often not enough for an username. By adding some extra random chosen characters &lt;font color="#ff8000"&gt;ca &lt;/font&gt;&lt;font color="#000000"&gt;it is long enough...&lt;/font&gt; &lt;li&gt;I maintain another non Oracle related blog as well: &lt;a href="http://jornica-etc.blogspot.com/" target="_blank"&gt;Etc.&lt;/a&gt; &lt;li&gt;Keywords of my favorite holidays: sea, sun and hills. Did I mention &lt;a href="http://members.tele2.nl/jornica/sicilie/sicilie.html" target="_blank"&gt;volcanoes&lt;/a&gt;? &lt;li&gt;My roots are in the southern part of the Netherlands; I like music from artists like &lt;a href="http://www.jansebagge.nl/" target="_blank"&gt;De Janse Bagge Bend&lt;/a&gt;, &lt;a href="http://www.g-reinders.nl/" target="_blank"&gt;Gé Reinders&lt;/a&gt; and &lt;a href="http://www.rowwenheze.nl/" target="_blank"&gt;Rowwen Hèze&lt;/a&gt;. &lt;li&gt;I like to watch fire engine movies on You Tube with my son.  &lt;li&gt;My family believes I'm a good cook.  &lt;li&gt;My favorite Linux distribution is homemade &lt;a href="http://www.linuxfromscratch.org/" target="_blank"&gt;Linux From Scratch&lt;/a&gt;. It's about building your own Linux system from source code.  &lt;li&gt;I use &lt;a href="http://lifehacker.com/" target="_blank"&gt;Lifehacker&lt;/a&gt; as a source for new software: Windows tools and utilities.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;And now, who's next (sorry 3 out of 8).&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="http://bar-solutions.com" href="http://bar-solutions.com" target="_blank"&gt;Patch&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="http://www.ome-b.nl" href="http://www.ome-b.nl"&gt;Ome-b&lt;/a&gt; (dutch)&lt;/li&gt; &lt;li&gt;&lt;a href="http://pbarut.blogspot.com/" target="_blank"&gt;Software Engineer Thoughts&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;  </content><link href="http://jornica.blogspot.com/feeds/1871841616758262010/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/1871841616758262010" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/1871841616758262010" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/1871841616758262010" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2008/01/tagged.html" rel="alternate" title="Tagged!" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-2180524784196873053</id><published>2007-12-13T22:08:00.000+01:00</published><updated>2007-12-13T23:13:22.904+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APEX"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Chart API"/><title type="text">Integrating  the Google Chart API  in APEX</title><content type="html">&lt;p&gt;A few days ago, Google released the &lt;a href="http://code.google.com/apis/chart/%20"&gt;Google Chart API&lt;/a&gt;. By calling a special crafted URL Google returns a image containing a chart derived from the parameters included in the URL. For instance&lt;/p&gt;&lt;pre&gt;http://chart.apis.google.com/chart?cht=p3&amp;amp;chd=t:3,5,6,0&amp;amp;chs=200x100&amp;amp;chl=10|20|30|40&lt;br /&gt;&amp;amp;chco=ff0000,00ff00,0000ff,000000&lt;/pre&gt;&lt;p&gt;will give the image shown left. At the right the Flash equivalent generated by APEX is shown.&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_AiK_1nkLoabg4y_jxzSduDUBEUe1ZIUkmcwH790Vfl_i1HyqHfpJCzOp1uZs-T_j9B7GSkrJhsb3YCBGBB4CFT22H8ke2nuhG73TFtsxVwcuPBlbu1IfJgxSI2sdqvTqX3MtpQ/s1600-h/googlechartexample.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_AiK_1nkLoabg4y_jxzSduDUBEUe1ZIUkmcwH790Vfl_i1HyqHfpJCzOp1uZs-T_j9B7GSkrJhsb3YCBGBB4CFT22H8ke2nuhG73TFtsxVwcuPBlbu1IfJgxSI2sdqvTqX3MtpQ/s400/googlechartexample.jpg" alt="" id="BLOGGER_PHOTO_ID_5143572352540367522" border="0" /&gt;&lt;/a&gt;&lt;p&gt;To include this dynamic Google chart based on a query on  a page, define a PL/SQL dynamic content region with the following PL/SQL source:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre&gt;DECLARE&lt;br /&gt;l_url VARCHAR2(2000) := 'http://chart.apis.google.com/chart?cht=p3&amp;amp;chs=200x100&amp;amp;chco=ff0000,00ff00,0000ff,000000';&lt;br /&gt;l_chd VARCHAR2(2000);&lt;br /&gt;l_chl VARCHAR2(2000);&lt;br /&gt;BEGIN&lt;br /&gt;FOR rec IN&lt;br /&gt;(SELECT d.deptno LABEL,&lt;br /&gt;   COUNT(e.empno) VALUE&lt;br /&gt; FROM dept d,&lt;br /&gt;   emp e&lt;br /&gt; WHERE d.deptno = e.deptno(+)&lt;br /&gt; GROUP BY d.deptno)&lt;br /&gt;LOOP&lt;br /&gt;  l_chd := l_chd || ',' || rec.VALUE;&lt;br /&gt;  l_chl := l_chl || '|' || rec.LABEL;&lt;br /&gt;END LOOP;&lt;br /&gt;l_url := l_url || 'chd=t:' || SUBSTR(l_chd,   2) || '&amp;amp;chl=' || SUBSTR(l_chl,   2);&lt;br /&gt;htp.p('&amp;lt;img src="' || l_url || '"/&amp;gt;');&lt;br /&gt;END;&lt;/pre&gt;&lt;p&gt;If you do not want to use the built-in Flash chart functionality, the Google Chart API is a simple alternative.&lt;/p&gt;</content><link href="http://jornica.blogspot.com/feeds/2180524784196873053/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/2180524784196873053" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/2180524784196873053" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/2180524784196873053" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2007/12/integrating-google-chart-api-in-apex.html" rel="alternate" title="Integrating  the Google Chart API  in APEX" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_AiK_1nkLoabg4y_jxzSduDUBEUe1ZIUkmcwH790Vfl_i1HyqHfpJCzOp1uZs-T_j9B7GSkrJhsb3YCBGBB4CFT22H8ke2nuhG73TFtsxVwcuPBlbu1IfJgxSI2sdqvTqX3MtpQ/s72-c/googlechartexample.jpg" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-285407596808942455</id><published>2007-10-29T22:24:00.000+01:00</published><updated>2007-10-29T23:28:06.293+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APEX"/><title type="text">Mail from Application Express  with Access Control  Enabled</title><content type="html">&lt;p&gt;One of the post installation task after installing Oracle 11 is the creation of Access Control List (ACL). Oracle provides a few &lt;a href="http://download.oracle.com/docs/cd/B28359_01/install.111/b32002/post_inst_task.htm#CHDCFCFA"&gt;scripts&lt;/a&gt; in order to allow &lt;code&gt;flows_030000&lt;/code&gt; to connect any host. What if you do not allow the database to connect &lt;b&gt;any&lt;/b&gt; host but only &lt;span style="font-weight: bold;"&gt;one&lt;/span&gt; host. For instance, you want to send &lt;a href="http://jornica.blogspot.com/2007/01/mail-from-application-express.html"&gt;mail from Application Express&lt;/a&gt; (APEX) ?&lt;/p&gt;&lt;p&gt;First, set up the email settings  in the administrative interface (Home&gt;Manage Service&gt;Instance Settings). Secondly, run the following statements as&lt;br /&gt;&lt;code&gt;system&lt;/code&gt;.&lt;/p&gt;&lt;pre&gt;-- Create an access control list&lt;br /&gt;BEGIN&lt;br /&gt;  dbms_network_acl_admin.create_acl(acl =&gt; 'apexmail.xml',   &lt;br /&gt;    description =&gt; 'Mail from Apex',   principal =&gt; 'FLOWS_030000',&lt;br /&gt;    is_grant =&gt; TRUE,   privilege =&gt; 'connect',   start_date =&gt; NULL,&lt;br /&gt;    end_date =&gt; NULL);&lt;br /&gt;END;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;-- Assign the list to your SMTP host, i.e. smtp.yyy.xx&lt;br /&gt;BEGIN&lt;br /&gt;  dbms_network_acl_admin.assign_acl(acl =&gt; 'apexmail.xml',&lt;br /&gt;    host =&gt; 'smtp.yyy.xx',   lower_port =&gt; 25,   upper_port =&gt; 25);&lt;br /&gt;END;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;-- Uncomment to remove access control list&lt;br /&gt;--BEGIN&lt;br /&gt;--  dbms_network_acl_admin.drop_acl(acl =&gt; 'apexmail.xml');&lt;br /&gt;--END;&lt;br /&gt;--/&lt;br /&gt;&lt;br /&gt;-- Please, do commit work.&lt;br /&gt;COMMIT;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You can find more information about the usage of &lt;code&gt;dbms_network_acl_admin&lt;/code&gt; in the &lt;a href="http://download.oracle.com/docs/cd/B28359_01/network.111/b28531/authorization.htm#insertedID11"&gt;Database Security Guide&lt;/a&gt;. For all the remaining network services you can apply the same technique.&lt;/p&gt;</content><link href="http://jornica.blogspot.com/feeds/285407596808942455/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/285407596808942455" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/285407596808942455" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/285407596808942455" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2007/10/mail-from-application-express-with.html" rel="alternate" title="Mail from Application Express  with Access Control  Enabled" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-1140339257654929660</id><published>2007-10-28T21:56:00.000+01:00</published><updated>2007-10-28T22:39:31.361+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APEX"/><title type="text">Where is the Scott schema in APEX?</title><content type="html">&lt;p&gt;I decided to install Oracle 11g. And with Oracle 11g Application Express (APEX)is installed by default. Before importing an application based on the &lt;code&gt;emp&lt;/code&gt; table, I decided to create a workspace based on the existing schema &lt;code&gt;Scott&lt;/code&gt;. However the administrative interface did not allow me to select &lt;code&gt;Scott&lt;/code&gt;. By not using the LOV but typing the schema name, APEX gave the following error: &lt;code&gt;Schema is reserved or restricted&lt;/code&gt;. What is going on?&lt;/p&gt;&lt;p&gt;APEX uses the following query to populate the list of  values:&lt;/p&gt;&lt;pre&gt;SELECT name n,&lt;br /&gt; name r&lt;br /&gt;FROM sys.user$ u&lt;br /&gt;WHERE type# = 1&lt;br /&gt;AND name &lt;&gt; 'FLOWS_030000'&lt;br /&gt;AND name NOT IN('HTMLDB_PUBLIC_USER',   'PUBLIC_USER',   'FLOWS_FILES',&lt;br /&gt;               'SCHEDULER',   'PEOPLE',   'APEX_PUBLIC_USER')&lt;br /&gt;AND name NOT IN&lt;br /&gt;(SELECT SCHEMA&lt;br /&gt; FROM wwv_flow_restricted_schemas&lt;br /&gt; WHERE NOT EXISTS&lt;br /&gt;  (SELECT 1&lt;br /&gt;   FROM wwv_flow_rschema_exceptions&lt;br /&gt;   WHERE schema_id =&lt;br /&gt;    (SELECT id&lt;br /&gt;     FROM wwv_flow_restricted_schemas&lt;br /&gt;     WHERE SCHEMA = u.name)&lt;br /&gt;  )&lt;br /&gt;)&lt;br /&gt;ORDER BY 1&lt;br /&gt;/&lt;/pre&gt;&lt;p&gt;Beside some hard coded schema names, there are two &lt;code&gt;flows_030000&lt;/code&gt; tables used in the query, &lt;code&gt;wwv_flow_restricted_schemas&lt;/code&gt; and &lt;code&gt;wwv_flows_rschema_exception&lt;/code&gt;.&lt;/p&gt; &lt;pre&gt;SQL&gt;SELECT * FROM flows_030000.wwv_flow_restricted_schemas t&lt;br /&gt;/&lt;br /&gt;ID SCHEMA CREATED_BY CREATED_ON       LAST_UPDATED_BY LAST_UPDATED_ON&lt;br /&gt;-- ------ ---------- ---------------- --------------- ---------------&lt;br /&gt;...&lt;br /&gt;38 SCOTT  SYS        3-8-2007 2:12:53&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;wwv_flows_rschema_exception &lt;/code&gt;contains no rows.&lt;/p&gt;&lt;p&gt;Both tables are used by the package &lt;code&gt;htmldb_site_admin_privs&lt;/code&gt;, which serves as an interface packages. Now remove the restriction on &lt;code&gt;Scott&lt;/code&gt; by executing the following statements (as &lt;code&gt;Sys&lt;/code&gt;).&lt;/p&gt;&lt;pre&gt;SQL&gt;exec flows_030000.htmldb_site_admin_privs.unrestrict_schema(p_schema =&gt; 'SCOTT');&lt;br /&gt;SQL&gt;commit;&lt;/pre&gt;And of course, this topic is covered by the &lt;a href="http://download.oracle.com/docs/cd/B28359_01/appdev.111/b32258/adm_wrkspc.htm#sthref3393"&gt;Application Express User's Guide&lt;/a&gt;.</content><link href="http://jornica.blogspot.com/feeds/1140339257654929660/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/1140339257654929660" rel="replies" title="3 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/1140339257654929660" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/1140339257654929660" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2007/10/where-is-scott-schema-in-apex.html" rel="alternate" title="Where is the Scott schema in APEX?" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-8818744150574014025</id><published>2007-07-13T23:59:00.002+02:00</published><updated>2009-12-28T13:55:36.482+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APEX"/><category scheme="http://www.blogger.com/atom/ns#" term="GIS"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Maps API"/><category scheme="http://www.blogger.com/atom/ns#" term="XE"/><title type="text">Google Maps in APEX on XE with spatial data</title><content type="html">&lt;p&gt;A picture says more than thousand words is well known saying, well let's have a look.&lt;/p&gt;&lt;iframe src="http://apex.oracle.com/pls/otn/f?p=oramaps" marginheight="0" marginwidth="0" title="satellite photo - GoogleMaps" scrolling="no" frameborder="0" height="380" width="480"&gt;&lt;/iframe&gt;&lt;p&gt;Choose your favorite country from the list, and the Google Map will pan to your country. As a bonus the selected country is colored red, the country shape is based on spatial data. You can zoom and move the map, or change the map type.&lt;/p&gt; &lt;p&gt;What do you need to build this application: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;An &lt;a title="Oracle Database 10g Express Edition" href="http://www.oracle.com/technology/products/database/xe/index.html" target="_blank"&gt;Oracle XE database&lt;/a&gt; or better. The good news is that XE already contains the &lt;code&gt;MDSYS&lt;/code&gt; schema full of spatial utilities. The bad news is that XE has no spatial data included. But ... &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;NAVTEQ provides &lt;a title="Oracle Spatial Partners' Downloads, Plug-ins &amp;amp; Data" href="http://www.oracle.com/technology/products/spatial/htdocs/spatial_partners_downloads.html#navteq_sampledata" target="_blank"&gt;sample data&lt;/a&gt; for Geocoder. Download, import and use it.  &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Apex, included with XE.  &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;A &lt;a title="Google Maps API - Add Google Maps to Your Website" href="http:///" target="_blank"&gt;Google Maps&lt;/a&gt; API key.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;And it is all free, as in beer.&lt;/p&gt; &lt;p&gt;Just a remark about using the term spatial. As you can read &lt;a title="Oracle Spatial &amp;amp; Oracle Locator: Location Features for Oracle Database 10g" href="http://www.oracle.com/technology/products/spatial/index.html" target="_blank"&gt;here&lt;/a&gt; XE does not have the Spatial option included nor does it include Oracle Locator with or without Oracle Mapviewer, but XE contains the &lt;code&gt;MDSYS&lt;/code&gt; schema and that is all we need.&lt;/p&gt;&lt;h3&gt;Include Google Maps&lt;/h3&gt;&lt;p&gt;Sign up for a Google Map API key &lt;a title="Google Maps API - Sign Up" href="http://www.google.com/apis/maps/signup.html" target="_blank"&gt;here&lt;/a&gt;. For XE use the following URL &lt;code&gt;&lt;a href="http://127.0.0.1:8080/"&gt;http://127.0.0.1:8080/&lt;/a&gt;&lt;/code&gt;. to sign up. Take a look at the sample page shown after generation of your key.&lt;/p&gt;&lt;p&gt;Now create in APEX a page (in a new or existing application) and navigate to the page attributes. &lt;/p&gt;&lt;p&gt;In the Display Attributes section set the cursor focus to Do not focus cursor. In the HTML Header section insert the following code, replace ... with your Google maps API key.&lt;/p&gt;&lt;pre&gt;&amp;lt;script src=http://maps.google.com/maps?file=api&amp;amp;amp;v=2&amp;amp;key=...&amp;amp;sensor=false&lt;br /&gt;type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;p&gt;In the  HTML Body Header (section Header and Footer) insert the following code:&lt;/p&gt;&lt;pre&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;//&amp;lt;![CDATA[&lt;br /&gt;function load() {&lt;br /&gt;if (GBrowserIsCompatible()) {&lt;br /&gt;var map = new GMap2(document.getElementById("map"));&lt;br /&gt;map.setCenter(new GLatLng(37.4419, -122.1419), 13);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;//]]&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;p&gt;In the Page HTML Body attribute (section HTML Body attribute) insert the following code:&lt;/p&gt;&lt;pre&gt;onload="load()" onunload="Gunload()"&lt;/pre&gt;&lt;p&gt;Add a HTML Text region to the page with the following region source:&lt;/p&gt;&lt;pre&gt;&amp;lt;div id="map" style="width: 500px; height: 300px"&amp;gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;p&gt;For Internet Explorer a small change of the page template is needed otherwise Internet Explorer stops responding. The first line of header (section Definition) should look like this: &lt;/p&gt;&lt;pre&gt;&amp;lt;html lang="&amp;amp;BROWSER_LANGUAGE." xmlns:htmldb="http://htmldb.oracle.com" xmlns:v="urn:schemas-microsoft-com:vml"&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Run the page and if everything is alright you will see a map of Palo Alto. This is the 'hello world' example of Google Maps. Note that it is required to issue the &lt;code&gt;SetCenter&lt;/code&gt; statement otherwise only a grey pane is shown on the place of the map. You can also add some bells and whistles: &lt;a title="Google Maps API Documentation" href="http://www.google.com/apis/maps/documentation/index.html#Adding_Controls_to_the_Map" target="_blank"&gt;map controls&lt;/a&gt; and &lt;a title="Google Maps API version 2  Reference" href="http://www.google.com/apis/maps/documentation/reference.html#GPolygon" target="_blank"&gt;polylgons&lt;/a&gt; (points connected by lines with a fill color as well). &lt;/p&gt;&lt;h3&gt;Prepare APEX &lt;/h3&gt;&lt;p&gt;Let us finish the web front end first before retrieving the geodata from the database. Modify the page created in the previous section.&lt;/p&gt;&lt;p&gt;Change the pagetype in PL/SQL (anonymous block). Insert the following in Region Source  (section Source):&lt;/p&gt;&lt;pre&gt;p_gis_data.draw_map(p_country=&amp;gt;:P1_COUNTRY);&lt;/pre&gt;&lt;p&gt;The package &lt;code&gt;p_gis_data&lt;/code&gt; is discussed later.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Add two items to the page: &lt;code&gt;P1_COUNTRY&lt;/code&gt; (select list with submit) with the following dynamic list of values query: &lt;/p&gt;&lt;pre&gt;SELECT initcap(country) display_value,&lt;br /&gt;country return_value&lt;br /&gt;FROM m_world&lt;br /&gt;ORDER BY 1&lt;/pre&gt;&lt;p&gt;And add a placeholder for the map  &lt;code&gt;P1_DIV&lt;/code&gt; (Display as text, does save state) with the following  value for Source value of expression (section Source):&lt;/p&gt; &lt;pre&gt;&amp;lt;div id="map" style="width: 500px; height: 300px"&amp;gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;p&gt;In order to initialize the Google Map add a before region process. This process sets the default value of the select list when there is no item selected.&lt;/p&gt;&lt;pre&gt;IF :P1_COUNTRY IS NULL&lt;br /&gt;THEN&lt;br /&gt;:P1_COUNTRY := 'Netherlands';&lt;br /&gt;END IF;&lt;/pre&gt;&lt;h3&gt;Load sample data&lt;/h3&gt; &lt;p&gt;Download the sample data and unzip. Create a separate user and tablespace for the sample data:&lt;/p&gt;&lt;pre&gt;SQL&amp;gt; CREATE TABLESPACE gis_data DATAFILE 'C:\ORACLEXE\ORADATA\XE\GIS_DATA.DBF' SIZE 600M ONLINE;&lt;br /&gt;SQL&amp;gt; CREATE USER gis_data IDENTIFIED BY gis_data DEFAULT TABLESPACE gis_data TEMPORARY TABLESPACE temp;&lt;br /&gt;SQL&amp;gt; GRANT CONNECT, RESOURCE TO gis_data;&lt;/pre&gt;&lt;p&gt;Only execute steps 1 and 2 from the README. You do not need to install Mapviewer. After some time all the data is loaded.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Retrieve spatial data&lt;/h3&gt;&lt;p&gt;It's time to retrieve spatial data from the database. Take a look at the &lt;code&gt;M_WORLD&lt;/code&gt; table, there is a column named &lt;code&gt;GEOMETRY&lt;/code&gt; with datatype &lt;code&gt;SDO_GEOMETRY&lt;/code&gt; which stores all the spatial data. The &lt;code&gt;GEOMETRY&lt;/code&gt; column stores the position (property &lt;code&gt;GEOMETRY.SDO_POINT&lt;/code&gt;), more or less the center, of a country and one of more polygons. A polygon consists of points connected by (straight) lines. Remember the Google polygons?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Our task is to retrieve all polygons from the &lt;code&gt;GEOMETRY&lt;/code&gt; column. Property &lt;code&gt;GEOMETRY.SDO_ELEM_INFO&lt;/code&gt; tells us how many polygons the property &lt;code&gt;GEOMETRY.SDO_ORDINATES&lt;/code&gt; stores and of which kind they are. The function &lt;code&gt;SDO_UTIL.GETNUMELEM&lt;/code&gt; retrieves the number of elements for a given geometry, in our case the number of polygons. The &lt;code&gt;SDO_UTIL.EXTRACT&lt;/code&gt; function extracts the &lt;em&gt;n&lt;/em&gt;th element from a geometry returning a geometry object as well. And the function &lt;code&gt;SDO_UTIL.GET_VERTICES&lt;/code&gt; retrieves all points of geometry.  Combining these two functions will result in a number of geometry objects, each object corresponds with one polygon.&lt;/p&gt;&lt;p&gt;We can retrieve this information in one SQL statement:&lt;/p&gt;&lt;pre&gt;SELECT country.geometry.sdo_point.x x,&lt;br /&gt;country.geometry.sdo_point.y y,&lt;br /&gt;country.element,&lt;br /&gt;CURSOR&lt;br /&gt;(SELECT x,&lt;br /&gt;y&lt;br /&gt;FROM TABLE(sdo_util.getvertices(sdo_util.EXTRACT(country.geometry, country.element)))&lt;br /&gt;ORDER BY id) area&lt;br /&gt;FROM&lt;br /&gt;(SELECT iv.*,&lt;br /&gt;LEVEL element&lt;br /&gt;FROM&lt;br /&gt;(SELECT *&lt;br /&gt;FROM m_world&lt;br /&gt;WHERE country = cp_name) iv&lt;br /&gt;CONNECT BY LEVEL &amp;lt;= sdo_util.getnumelem(geometry)) country&lt;br /&gt;/&lt;/pre&gt;&lt;p&gt;The inline view &lt;code&gt;iv&lt;/code&gt; selects one row from the  &lt;code&gt;M_WORLD&lt;/code&gt; table and for each element  of the corresponding geometry a copy of this row is generated. In the country select each element is stored in a cursor expression. The next thing is to write some PL/SQL code to generate javascript based on this query i.e. &lt;code&gt;&lt;a href="http://jornica.googlepages.com/p_gis_data.zip"&gt; p_gis_data&lt;/a&gt;&lt;/code&gt;.&lt;/p&gt;&lt;h3&gt;Further reading&lt;br /&gt;&lt;/h3&gt;The idea for this blog entry came after reading &lt;a href="http://www.orablogs.com/oragis/archives/001886.html"&gt;Creating Thematic Google Mapping Applications (for Business Intelligence) using Oracle Locator/Spatial and Application Express&lt;/a&gt; and &lt;a href="http://www.oracle.com/global/de/community/tipps/geo-1/index.html"&gt;Auf den Ort kommt es an: Geodaten in Application Express-Anwendungen nutzen&lt;/a&gt; (in german) and of course  &lt;a href="http://www.blogger.com/href=%22http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14255/toc.htm"&gt;Oracle Spatial User's Guide and Reference&lt;/a&gt;.</content><link href="http://jornica.blogspot.com/feeds/8818744150574014025/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/8818744150574014025" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/8818744150574014025" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/8818744150574014025" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2007/07/google-maps-in-apex-on-xe-with-spatial.html" rel="alternate" title="Google Maps in APEX on XE with spatial data" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-4717543562941514336</id><published>2007-07-01T22:23:00.002+02:00</published><updated>2008-03-01T16:17:25.540+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APEX"/><category scheme="http://www.blogger.com/atom/ns#" term="SQLDeveloper"/><category scheme="http://www.blogger.com/atom/ns#" term="XE"/><title type="text">APEX 3.0.1 on XE</title><content type="html">&lt;p style="border: 1px solid red; padding: 5px;"&gt;On 29 Februari 2008 Oracle released Application Express 3.1 . With this release you can upgrade the Application Express within Oracle XE to 3.1. For more information on this topic see &lt;a href="http://www.oracle.com/technology/products/database/application_express/html/3.1_and_xe.html"&gt;Oracle Database XE and Application Express 3.1&lt;/a&gt; and &lt;a href="http://jornica.blogspot.com/2008/03/apex-31-on-xe.html"&gt;APEX 3.1 on XE &lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Oracle released Application Express 3.0.1 recently. With this release you can upgrade APEX within Oracle XE from 2.1 to 3.0.1 (see &lt;a href="http://www.oracle.com/technology/products/database/application_express/html/3.0.1_and_xe.html"&gt;Oracle Database XE and Application Express 3.0.1&lt;/a&gt;). But how to upgrade when you already installed &lt;a href="http://jornica.blogspot.com/2007/03/apex-30-on-xe.html"&gt; APEX 3.0 on XE&lt;/a&gt;?&lt;/p&gt; &lt;p&gt;There is a patch available on Metalink to upgrade from APEX 3.0 to 3.0.1. According to the &lt;a href="http://www.oracle.com/technology/products/database/application_express/html/3.0.1_readme.html"&gt;Patch Set Notes&lt;/a&gt; Oracle9i release 2 and higher support this patch if you have APEX 3.0.0.00.20 already installed (the Patch Set Notes also includes a list of fixed bugs). In order to download the patch from Metalink, you will need a support contract (which is not included with XE). &lt;/p&gt; &lt;p&gt;Another option is to remove APEX 3.0 completely. After the removal, XE has APEX 2.1. (still) installed and the next step is of course to install APEX 3.0.1. The big advantage of this option is you following the main route of upgrading XE/APEX as proposed by Oracle. However there are some things to keep in mind.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;As always start with making a backup of your database.&lt;/p&gt;&lt;/li&gt;  &lt;li&gt;&lt;p&gt;Export all applications you would like to see again in APEX 3.0.1. If you remove APEX 3.0 completely, you also remove all applications stored  in the &lt;code&gt;FLOWS_030000&lt;/code&gt;(APEX 3.0) schema! Note that applications stored in the &lt;code&gt;FLOWS_020100&lt;/code&gt; schema will be migrated to &lt;code&gt;FLOWS_030000&lt;/code&gt; (APEX 3.0.1).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Make a backup of changed or added cascading style sheets (CSS), images and java scripts separately.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Run the &lt;code&gt;apex_3.0.1\apxremov.sql&lt;/code&gt; script (the script is the same for both versions).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Run the &lt;code&gt;apex_3.0.1\apxins.sql&lt;/code&gt; script. Check the installation log for errors.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Copy the &lt;code&gt;apex_3.0.1\images&lt;/code&gt; directory to the &lt;code&gt;/i/&lt;/code&gt;directory. Also copy the previous backed up CSS, images and java scripts to the &lt;code&gt;/i/&lt;/code&gt; directory.&lt;/p&gt;&lt;/li&gt;  &lt;li&gt;&lt;p&gt;Import all applications  exported in the first step. Note that existing applications in APEX 2.1 are migrated to APEX 3.0.1 as part of the upgrade process.&lt;/p&gt;&lt;/li&gt;  &lt;li&gt;&lt;p&gt;Time to make a backup again.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Have a look at the &lt;a href="http://jornica.blogspot.com/2007/05/apex-reports-and-sql-developer.html"&gt;APEX reports in SQL Developer&lt;/a&gt;, no errors any more.&lt;/p&gt;</content><link href="http://jornica.blogspot.com/feeds/4717543562941514336/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/4717543562941514336" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/4717543562941514336" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/4717543562941514336" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2007/07/apex-301-on-xe.html" rel="alternate" title="APEX 3.0.1 on XE" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-5342406427896095952</id><published>2007-06-17T16:35:00.000+02:00</published><updated>2007-07-24T19:04:02.154+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Quest Code Tester  for Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="SQLDeveloper"/><title type="text">Remote debugging Code Tester</title><content type="html">&lt;p&gt;&lt;a href="http://www.unit-test.com/"&gt;Quest Code Tester for Oracle&lt;/a&gt; (Code Tester) helps you with defining test cases, generating test harnesses and presenting the test results in a structured way. Code Tester does not provide any features to debug your code.  If you run into a red light situation when a test case fails, you have discover where the error is located. This means checking inputs and outcomes in order to exclude  incorrect setup and  incorrect initialization code. And of course checking your code, recompiling your (test) code and login again.&lt;/p&gt;&lt;p&gt;If this does not result into a green light, it is time to debug your code with a development IDE. As a result you have to transfer your test code into your development IDE. Wouldn't it be nice if you could enter debug mode seamlessly: when executing your test case the execution stops at a breakpoint and you can debug your code. The answer is: yes, you can.  With &lt;a href="http://www.oracle.com/technology/products/database/sql_developer/index.html"&gt;SQL Developer&lt;/a&gt; you can remote debug your code within a test run.&lt;/p&gt;&lt;p&gt;The linking pin between Code Tester and SQL Developer is the package &lt;code&gt;sys.dbms_debug_jdwp&lt;/code&gt; where jdwp stands for Java Debug Wire Protocol. This protocols needs a debugger process i.e. SQL Developer and a debuggee process i.e. Code Tester. The debugger listens for  requests from the debuggee i.e. PL/SQL package procedure calls to &lt;code&gt;connect_tcp&lt;/code&gt; and &lt;code&gt;disconnect&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Setting up the debuggee&lt;/span&gt;&lt;br /&gt;In Code Tester you have to modify the initialization section of your test case. Add the following code&lt;br /&gt;&lt;code&gt;dbms_debug_jdwp.connect_tcp(host =&gt;  '127.0.0.1', port =&gt; 4000);&lt;/code&gt;&lt;br /&gt;The first parameter is your IP address of the client where the Code Tester IDE runs (as seen from the database server you're connected to). Because I'm running Code Tester and Oracle XE on the same machine, I use  the local host address &lt;code&gt;127.0.0.1&lt;/code&gt;. The second parameter is the default port. An alternative for the hard coded IP address is &lt;code&gt;SYS_CONTEXT ('USERENV', 'IP_ADDRESS').&lt;/code&gt;&lt;/p&gt;&lt;p&gt;After the test case is executed, switch off remote debugging. Add the following code to the cleanup section:&lt;br /&gt;&lt;code&gt;dbms_debug_jdwp.disconnect;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Setting up the debugger&lt;/span&gt;&lt;br /&gt;In SQL Developer login with the same user as Code Tester and right click on your connection, a context menu appears and select the 'Remote Debug' option. A small window with the title 'Debugger - Listen for the JPDA'  (Java Platform Debugger Architecture) appears, enter the address or host name where SQL Developer should listen to connect. Use the same IP address as in &lt;code&gt;dbms_debug_jdwp.connect_tcp&lt;/code&gt;. Also check if the port is the same.&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYZgRyggaifs6GuOPVaHMcgWQ00DTbCJym1hnL8QJK6inp4uhiei68aQ6j0Zy4FBSs3GJ71uDB2eFsx5imA0gBnTfTNmfhtgtoGCbMPMBLCRbUniulJimiNrCDviC3MYBWnqzncg/s1600-h/sqldeveloper008.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYZgRyggaifs6GuOPVaHMcgWQ00DTbCJym1hnL8QJK6inp4uhiei68aQ6j0Zy4FBSs3GJ71uDB2eFsx5imA0gBnTfTNmfhtgtoGCbMPMBLCRbUniulJimiNrCDviC3MYBWnqzncg/s200/sqldeveloper008.jpg" alt="" id="BLOGGER_PHOTO_ID_5077035990931035314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjreMCfK2dPkJp_YmSbHFVtqB3CtNvhbfQUVDGuWJuyyY0FvaVQyDh3RvqMx41NIaKMj2mInllCuO-qUw6REskP3_Ft6DW4aCb3yA8rRAWKL2T8ejcxKaPX4SQGcPvPkeHOuTSNQ/s1600-h/sqldeveloper009.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjreMCfK2dPkJp_YmSbHFVtqB3CtNvhbfQUVDGuWJuyyY0FvaVQyDh3RvqMx41NIaKMj2mInllCuO-qUw6REskP3_Ft6DW4aCb3yA8rRAWKL2T8ejcxKaPX4SQGcPvPkeHOuTSNQ/s200/sqldeveloper009.jpg" alt="" id="BLOGGER_PHOTO_ID_5077035986636067986" border="0" /&gt;&lt;/a&gt;&lt;p&gt;Before switching to Code Tester again &lt;span style="color: rgb(255, 0, 0);"&gt;set a breakpoint&lt;/span&gt; in your code (and &lt;span style="color: rgb(255, 0, 0);"&gt;compile your code for debug&lt;/span&gt;) otherwise the debugger will not stop at your breakpoint. At last but not at least make sure the user has the &lt;code style="color: rgb(255, 0, 0);"&gt;debug connect session&lt;/code&gt; privilege and the &lt;code style="color: rgb(255, 0, 0);"&gt;debug any procedure&lt;/code&gt; when debugging other users objects.&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Debugger meets debuggee&lt;/span&gt;&lt;br /&gt;It is time to run your test with Code Tester. SQL Developer will stop on your breakpoint. Note: while debugging your code Code Tester will not respond.  After stepping through your code press the resume button in SQL Developer to return to Code Tester. As an example I modified the code of the  normal usage test case of the function &lt;code&gt;qctod#betwnstr&lt;/code&gt; (see for an explanation and the source code  &lt;a href="http://www.unit-test.com/Presentations/present.php?rid=3"&gt;How Quest Code Tester for Oracle can help you get rid of bugs in your PL/SQL procedures&lt;/a&gt;). In the picture below SQL Developer hits the breakpoint at line 13. In the data tab you can see all variables and their values.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggOoiqwyXrZIr8vo8SyHv-Uvh5ehABP5cnAJtTMtuZRw7PGwFPNmVipnBpmACmn_dWhAhuL8LoPU1IjsDmOcGBte57PNf_O6yzxOoXiBB7VaZeuU79PrjE6pHpcSvDV8ZVU0j5gw/s1600-h/sqldeveloper010.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggOoiqwyXrZIr8vo8SyHv-Uvh5ehABP5cnAJtTMtuZRw7PGwFPNmVipnBpmACmn_dWhAhuL8LoPU1IjsDmOcGBte57PNf_O6yzxOoXiBB7VaZeuU79PrjE6pHpcSvDV8ZVU0j5gw/s200/sqldeveloper010.jpg" alt="" id="BLOGGER_PHOTO_ID_5077035986636068002" border="0" /&gt;&lt;/a&gt;&lt;p&gt;This example shows how to use remote debugging with Code Tester. Instead of using SQL Developer as debugger you can also use &lt;a href="http://www.toadsoft.com/toad_oracle.htm"&gt;Toad for Oracle&lt;/a&gt; or &lt;a href="http://www.oracle.com/technology/products/jdev/index.html"&gt;Jdeveloper&lt;/a&gt;. And also every front end can be used as debuggee for remote debugging as long the calls to &lt;code&gt;dbms_debug_jdwp&lt;/code&gt; can be implemented. Let's start debugging!&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;Links&lt;/span&gt;&lt;br /&gt;I found the following links usefully while writing this blog entry:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;The basics explained: &lt;a href="http://sueharper.blogspot.com/2006/07/remote-debugging-with-sql-developer_13.html"&gt;Remote Debugging with SQL Developer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Remote debugging and Application Express: &lt;a href="http://www.orablogs.com/krice/archives/001691.html"&gt;Wonder twin powers activate!&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Comments in the package specification of &lt;code&gt;SYS.DBMS_DEBUG_JDWP&lt;/code&gt; &lt;a href="http://forums.oracle.com/forums/forum.jspa?forumID=260"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The &lt;a href="http://forums.oracle.com/forums/forum.jspa?forumID=260"&gt;SQL Developer forum&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.trivadis.com/Images/JPDA_tcm17-7136.pdf"&gt;&lt;span class="text9grey"&gt;&lt;span id="_SE_FLD" _se_fld="tcm:Content/custom:Content/custom:Title[1]"&gt;Debugging PL/SQL and Java Stored Programs with JPDA&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;</content><link href="http://jornica.blogspot.com/feeds/5342406427896095952/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/5342406427896095952" rel="replies" title="4 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/5342406427896095952" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/5342406427896095952" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2007/06/remote-debugging-code-tester.html" rel="alternate" title="Remote debugging Code Tester" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYZgRyggaifs6GuOPVaHMcgWQ00DTbCJym1hnL8QJK6inp4uhiei68aQ6j0Zy4FBSs3GJ71uDB2eFsx5imA0gBnTfTNmfhtgtoGCbMPMBLCRbUniulJimiNrCDviC3MYBWnqzncg/s72-c/sqldeveloper008.jpg" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-3738283110382997942</id><published>2007-05-24T23:42:00.000+02:00</published><updated>2007-06-02T00:04:47.767+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PL/SQL"/><title type="text">Returning into clause and post statement triggers</title><content type="html">&lt;p&gt;If you are using &lt;a href="http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14261/returninginto_clause.htm#LNPLS01354"&gt;&lt;code&gt;RETURNING INTO&lt;/code&gt;&lt;/a&gt; clauses with DML statements and you are also using (post statement) &lt;a href="http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14220/triggers.htm#i12313"&gt;triggers&lt;/a&gt;  then you should be aware of the following caveat where the values of the &lt;code&gt;RETURNING INTO&lt;/code&gt; do not match the column values.&lt;/p&gt;&lt;p&gt;To show this behavior, set up a small test case first. A table &lt;code&gt;t1&lt;/code&gt; with one column &lt;code&gt;c1&lt;/code&gt; with an &lt;code&gt;after insert statement&lt;/code&gt; trigger, modifying the &lt;code&gt;c1&lt;/code&gt; column.&lt;/p&gt;&lt;pre&gt;SQL&gt; CREATE TABLE t1(c1 VARCHAR2(10));&lt;br /&gt;&lt;br /&gt;Table created.&lt;br /&gt;&lt;br /&gt;SQL&gt;&lt;br /&gt;SQL&gt; CREATE TRIGGER t_ais_t1 AFTER INSERT ON t1&lt;br /&gt;2  BEGIN&lt;br /&gt;3    UPDATE t1&lt;br /&gt;4    SET c1 = 'TRIGGER';&lt;br /&gt;5  END;&lt;br /&gt;6  /&lt;br /&gt;&lt;br /&gt;Trigger created.&lt;/pre&gt;&lt;p&gt;Insert a row in &lt;code&gt;t1&lt;/code&gt; and return the new value of &lt;code&gt;c1&lt;/code&gt; into bind variable &lt;code&gt;c1&lt;/code&gt;.&lt;/p&gt;&lt;pre&gt;SQL&gt; VARIABLE c1 VARCHAR2(10)&lt;br /&gt;SQL&gt;&lt;br /&gt;SQL&gt; INSERT INTO t1(c1)VALUES('SQLPLUS') RETURNING c1 INTO :c1&lt;br /&gt;2  /&lt;br /&gt;&lt;br /&gt;1 row created.&lt;/pre&gt;&lt;p&gt;And inspect the contents of the table and the value of the bind variable.&lt;/p&gt;&lt;pre&gt;SQL&gt;&lt;br /&gt;SQL&gt; SELECT c1 "column",&lt;br /&gt;2    :c1 "bind"&lt;br /&gt;3  FROM t1&lt;br /&gt;4  /&lt;br /&gt;&lt;br /&gt;column     bind&lt;br /&gt;---------- ----------&lt;br /&gt;TRIGGER    SQLPLUS&lt;br /&gt;&lt;br /&gt;1 row selected.&lt;/pre&gt;&lt;p&gt;As expected the value of column &lt;code&gt;c1&lt;/code&gt; is &lt;code&gt;TRIGGER&lt;/code&gt;. The value is the bind variable is &lt;code&gt;SQLPLUS&lt;/code&gt;. This value is set before the after statement trigger starts.&lt;/p&gt;&lt;p&gt;Although this code is not production code, you might notice this behavior in production code as well: I discovered this behavior hidden in a &lt;a href="http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm#sthref1293"&gt;mutating table&lt;/a&gt; workaround.&lt;/p&gt;</content><link href="http://jornica.blogspot.com/feeds/3738283110382997942/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/3738283110382997942" rel="replies" title="4 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/3738283110382997942" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/3738283110382997942" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2007/05/returning-into-clause-and-post.html" rel="alternate" title="Returning into clause and post statement triggers" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-7624660011151650497</id><published>2007-05-13T13:44:00.000+02:00</published><updated>2007-05-13T15:08:35.585+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APEX"/><category scheme="http://www.blogger.com/atom/ns#" term="SQLDeveloper"/><title type="text">APEX  reports and SQL Developer</title><content type="html">&lt;p&gt;Both &lt;a href="http://krisrice.blogspot.com/2007/05/new-patch-with-apex-features.html"&gt; Kris Rice&lt;/a&gt; and &lt;a href="http://dgielis.blogspot.com/2007/05/apex-reports-in-sql-developer.html"&gt;Dimitri Gieles&lt;/a&gt; blogged about new APEX reports in SQL Developer 1.1.3 . Minor detail: those reports are build for Application Express version 3.0.1 , which is not released yet.&lt;/p&gt;&lt;p&gt;I installed the new version of SQL Developer, and tried to run the APEX reports (location in the reports tree: All reports, Data dictionary Reports, Application Express). Surprisingly, I did not get the message &lt;code&gt;Application Express 3.0.1 or higher required&lt;/code&gt;. In a few cases I received an error: &lt;code&gt;ORA-00904 invalid identifier&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4LlupUbxwsnjRzVr-QuoRsBT82J0wl0Mzvxb3uHOZEKalFsqLMfmt8va6MU1ZrebH72t8kA3riESAHG7r4prvsDPxmcKdusDxHT5dKT7qGH5H3Yywb3cFJjs8Zjn6MFLr9drOLg/s1600-h/sqldeveloper006.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4LlupUbxwsnjRzVr-QuoRsBT82J0wl0Mzvxb3uHOZEKalFsqLMfmt8va6MU1ZrebH72t8kA3riESAHG7r4prvsDPxmcKdusDxHT5dKT7qGH5H3Yywb3cFJjs8Zjn6MFLr9drOLg/s200/sqldeveloper006.jpg" alt="" id="BLOGGER_PHOTO_ID_5064028969989107762" border="0" /&gt;&lt;/a&gt;To find the SQL behind the reports a simple copy and paste of the report did not work i.e select the Application report, right click and select copy. Select the User Defined Reports, right click and paste from, nothing happened. Even export of the report(s) did not work.&lt;/p&gt;&lt;p&gt;After some searching I found the report SQL hidden in a &lt;code&gt;&lt;/code&gt;file: &lt;code&gt;oracle.sqldeveloper.report.jar&lt;/code&gt; (location sqldeveloper\extentions directory). This &lt;code&gt;.jar&lt;/code&gt; file includes an &lt;code&gt;apex30.xml&lt;/code&gt;, this file contains all the APEX reports in XML format (you can unzip the XML file with an unzip utility). The next step is to import the &lt;code&gt;apex30.xml&lt;/code&gt; and then you will see all the reports in the User Defined Reports branche as well.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGm7qZ3ltr_GvMWT6Rpq5BU84nWYC1eKDcdf01oL6Ky7yVvPSSg3NVEwWEM41A0skiwt7IuqDSfmfn6-1XKwUHVRerXBqXQzH3q8TZFK0MkzGWXErV2MuMVwy9xEcsf135YyBeig/s1600-h/sqldeveloper007.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGm7qZ3ltr_GvMWT6Rpq5BU84nWYC1eKDcdf01oL6Ky7yVvPSSg3NVEwWEM41A0skiwt7IuqDSfmfn6-1XKwUHVRerXBqXQzH3q8TZFK0MkzGWXErV2MuMVwy9xEcsf135YyBeig/s200/sqldeveloper007.jpg" alt="" id="BLOGGER_PHOTO_ID_5064029141787799618" border="0" /&gt;&lt;/a&gt;Changing the SQL is left as an exercise to the reader... ;-)&lt;/p&gt;</content><link href="http://jornica.blogspot.com/feeds/7624660011151650497/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/7624660011151650497" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/7624660011151650497" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/7624660011151650497" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2007/05/apex-reports-and-sql-developer.html" rel="alternate" title="APEX  reports and SQL Developer" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4LlupUbxwsnjRzVr-QuoRsBT82J0wl0Mzvxb3uHOZEKalFsqLMfmt8va6MU1ZrebH72t8kA3riESAHG7r4prvsDPxmcKdusDxHT5dKT7qGH5H3Yywb3cFJjs8Zjn6MFLr9drOLg/s72-c/sqldeveloper006.jpg" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-8804438756795883514</id><published>2007-04-17T23:30:00.000+02:00</published><updated>2007-04-18T07:36:36.166+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APEX"/><title type="text">Multi value selectors</title><content type="html">&lt;p&gt;APEX had three multi value selectors: check box, multi select and list manager. APEX 3.0 introduces a new multi value selector: the shuttle. An shuttle consists of two text areas with buttons between the the area's to move items back and forth. At the right side, the selection, there are buttons to change the order of the items in the right text area. All selectors are based on a list of values. Setting or getting values of these selectors can be done with colon separated strings i.e. &lt;code&gt; 'Violet:Indigo:Blue'&lt;/code&gt;.&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihVeKPpg4lhhIq0SlFFOHzb9zredCHVqwizLMzQs7phG17lVA0mEfNlPIVBM0oRaVcjoYfJs2Je0V_xGcf313DXzuW-4t4a4B5EuJJvjb82Gw_6ooU7zzzXZCOyPVuKjXUjCwegQ/s1600-h/mulitvalueselects.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihVeKPpg4lhhIq0SlFFOHzb9zredCHVqwizLMzQs7phG17lVA0mEfNlPIVBM0oRaVcjoYfJs2Je0V_xGcf313DXzuW-4t4a4B5EuJJvjb82Gw_6ooU7zzzXZCOyPVuKjXUjCwegQ/s200/mulitvalueselects.jpg" alt="" id="BLOGGER_PHOTO_ID_5054517763876412498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;The shuttle and list manager also preserve the select order as you can see in the picture. For each selector the same values in the  same order are selected: first Violet and second Indigo. As you can see in the text boxes the shuttle and list manager preserve selection order in contrary with check box and multi select. The picture shown here is a modified version of on-line demo &lt;a href="http://apex.oracle.com/pls/otn/f?p=37719"&gt;Item Types&lt;/a&gt;.&lt;/p&gt;</content><link href="http://www.blogger.com/feeds/21169145/posts/default/8804438756795883514" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/8804438756795883514" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2007/04/multi-value-selectors.html" rel="alternate" title="Multi value selectors" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihVeKPpg4lhhIq0SlFFOHzb9zredCHVqwizLMzQs7phG17lVA0mEfNlPIVBM0oRaVcjoYfJs2Je0V_xGcf313DXzuW-4t4a4B5EuJJvjb82Gw_6ooU7zzzXZCOyPVuKjXUjCwegQ/s72-c/mulitvalueselects.jpg" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-8695654090430193220</id><published>2007-04-02T23:16:00.001+02:00</published><updated>2008-03-01T16:16:30.820+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APEX"/><category scheme="http://www.blogger.com/atom/ns#" term="XE"/><title type="text">APEX 3.0 on XE part 2</title><content type="html">&lt;p style="border: 1px solid red; padding: 5px;"&gt;On 29 Februari 2008 Oracle released Application Express 3.1 . With this release you can upgrade the Application Express within Oracle XE to 3.1. For more information on this topic see &lt;a href="http://www.oracle.com/technology/products/database/application_express/html/3.1_and_xe.html"&gt;Oracle Database XE and Application Express 3.1&lt;/a&gt; and &lt;a href="http://jornica.blogspot.com/2008/03/apex-31-on-xe.html"&gt;APEX 3.1 on XE &lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you followed the guidelines of &lt;a href="http://jornica.blogspot.com/2007/03/apex-30-on-xe.html"&gt;APEX 3.0 on XE&lt;/a&gt;, you have a working APEX 3.0 interface. However the administrative interface of APEX is not installed on XE by default. Using this interface you can manage all aspects of the service including creating, removing, and managing workspaces. &lt;a href="http://www.blogger.com/profile/05436768788579147132"&gt;Barney Mattox&lt;/a&gt; discovered a workaround to install this interface as well.&lt;/p&gt;&lt;p&gt;In order to install the administrative interface perform the following steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Start SQL*Plus. Make sure your working folder is the APEX installation folder (where &lt;code&gt;apexins.sql&lt;/code&gt; is located).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Connect as user &lt;code&gt;SYS&lt;/code&gt;.&lt;br /&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;ALTER SESSION SET CURRENT_SCHEMA = FLOWS_030000&lt;br /&gt;/&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The following command imports the administrative interface: &lt;code&gt;@script\f4050.sql&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;The following command imports the request for workspace interface: &lt;code&gt;@script\f4700.sql&lt;/code&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Change the password for the &lt;code&gt;ADMIN&lt;/code&gt; user in order to login in the administrative interface: &lt;code&gt;@apxxepwd.sql&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Use the following URL to access the administrative interface &lt;code&gt;http://server:port/apex/f?p=4550:10&lt;/code&gt; i.e. &lt;code&gt;http://127.0.0.1:8080/apex/f?p=4550:10&lt;/code&gt; .&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Additonal notes:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Issue a &lt;code&gt;spool install.log&lt;/code&gt; after logging in to SQL* Plus. If there occurs an error SQL*Plus will exit. You can use the logfile to find out what went wrong.&lt;br /&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;I experienced problems with step 3: Illegal security group id value for this schema. A workaround is to login as &lt;code&gt;FLOWS_030000&lt;/code&gt; and run the scripts. First you need to unlock user &lt;code&gt;FLOWS_030000&lt;/code&gt;:&lt;br /&gt;&lt;code&gt;ALTER USER FLOWS_030000 IDENTIFIED BY password ACCOUNT UNLOCK&lt;br /&gt;/&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;</content><link href="http://jornica.blogspot.com/feeds/8695654090430193220/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/8695654090430193220" rel="replies" title="12 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/8695654090430193220" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/8695654090430193220" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2007/04/apex-30-on-xe-part-2.html" rel="alternate" title="APEX 3.0 on XE part 2" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21169145.post-8820971392554029543</id><published>2007-03-20T22:37:00.000+01:00</published><updated>2007-03-22T08:11:01.049+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PL/SQL"/><title type="text">Enumeration types in PL/SQL?</title><content type="html">&lt;p&gt;In the book &lt;a href="http://safari.oreilly.com/0596005873"&gt;Oracle PL/SQL for DBAs&lt;/a&gt; the definition of the type &lt;code&gt;BOOLEAN&lt;/code&gt; is shown:&lt;/p&gt;&lt;pre&gt;SELECT text&lt;br /&gt;  FROM all_source&lt;br /&gt; WHERE owner = 'SYS'&lt;br /&gt;   AND type = 'PACKAGE'&lt;br /&gt;   AND name = 'STANDARD' &lt;br /&gt;   AND line &lt;5&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;TEXT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             &lt;br /&gt;-------------------------------------------------------------&lt;br /&gt;package STANDARD AUTHID CURRENT_USER is              &lt;br /&gt;&lt;br /&gt;  /********** Types and subtypes, do not reorder **********/ &lt;br /&gt;  type BOOLEAN is (FALSE, TRUE);&lt;br /&gt;&lt;br /&gt;4 rows selected.&lt;/pre&gt;&lt;p&gt;Have you seen that kind of type definition before? I did, it looks like a Delphi enumeration type when you replace the &lt;code&gt;is&lt;/code&gt; with &lt;code&gt;=&lt;/code&gt; . Let's define our own type.&lt;/p&gt;&lt;pre&gt;create package TRAFFIC is &lt;br /&gt;  type LIGHT_T is (RED, YELLOW, GREEN);&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;Warning: Package created with compilation errors.&lt;br /&gt;&lt;br /&gt;SHOW ERR&lt;br /&gt;&lt;br /&gt;LINE/COL   TEXT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             &lt;br /&gt;-------------------------------------------------------------&lt;br /&gt;2,19       PLS-00505: User Defined Types may only be defined &lt;br /&gt;           as PLSQL Tables or Records                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     &lt;br /&gt;2,3        PL/SQL: Declaration ignored                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      &lt;br /&gt;&lt;br /&gt;2 rows selected&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Perhaps this is an enhancement request for Oracle 11g release 2?&lt;/p&gt;</content><link href="http://jornica.blogspot.com/feeds/8820971392554029543/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/21169145/8820971392554029543" rel="replies" title="2 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/21169145/posts/default/8820971392554029543" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/21169145/posts/default/8820971392554029543" rel="self" type="application/atom+xml"/><link href="http://jornica.blogspot.com/2007/03/enumeration-types-in-plsql.html" rel="alternate" title="Enumeration types in PL/SQL?" type="text/html"/><author><name>Jornica</name><uri>http://www.blogger.com/profile/15492511382521784329</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="http://photos1.blogger.com/x/blogger/7477/2138/320/277111/blog.jpg" width="21"/></author><thr:total>2</thr:total></entry></feed>