<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8721777</id><updated>2011-11-30T09:42:26.929-08:00</updated><title type='text'>Michael A. Rife's Blog</title><subtitle type='html'>I have developed Oracle based software since 1987 (Oracle V5.0 and SQL*Form v2.0).
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://flagcounter.com/more/5I0"&gt;&lt;img src="http://flagcounter.com/count/5I0/bg=FFFFFF/txt=000000/border=CCCCCC/columns=2/maxflags=12/viewers=0/labels=0/" border="0"&gt;&lt;/a&gt;
&lt;br&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8721777.post-5413807608528785144</id><published>2011-09-28T10:35:00.000-07:00</published><updated>2011-09-28T11:39:37.436-07:00</updated><title type='text'>Oracle Openworld 2011 Schedule Set</title><content type='html'>Yes!!  I finally get to go to an Oracle Openworld.  I have been to many  IOUG users weeks before and after the IOUG conference split from Oracle  in 1995 along with a couple ODTUG conferences, but not to an Oracle Openworld  conferences out in San Francisco.&lt;br /&gt;&lt;br /&gt;I got my schedule all set. Here  is the process I went through to get it my schedule loaded on my phone  via my Google calendar.  (I know there is an Oracle Openworld  application, but I have an old Windows Mobile phone and the Android port  for my phone eats my battery and I have no cellular data service...)&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In  the Openworld schedule content catalog I went through and populated my interest list.&lt;/li&gt;&lt;li&gt;I copied (cut and paste) the 69 events to my PC in Excel (date, time, location and event title).&lt;/li&gt;&lt;li&gt;In the Openworld schedule builder I selected my first  choices for each time slot.  I have 36 first choices.  I prefixed my  primary event names with "1)".&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Next I selected 33 secondary choices left on my interest list for each time slot. I prefixed my secondary event names with "2)".&lt;/li&gt;&lt;li&gt;I saved all the events to a CVS file.&lt;/li&gt;&lt;li&gt;I imported the CVS file into my Google calendar.&lt;/li&gt;&lt;li&gt;I synced my old Windows Mobile phone with my Google calendar.&lt;/li&gt;&lt;li&gt;Now I have to fit in time for the exhibit hall..&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;It was a long painful process, but I now have all the events I want go to in my phone.&lt;br /&gt;&lt;br /&gt;Here are my preferred events for each time slot.  Unfortunately it shows the session ID and not the session title.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-EtFBnNneSww/ToNlGrdqcMI/AAAAAAAAAGU/a0E-52xqKkU/s1600/sessions.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 202px; height: 320px;" src="http://2.bp.blogspot.com/-EtFBnNneSww/ToNlGrdqcMI/AAAAAAAAAGU/a0E-52xqKkU/s320/sessions.jpg" alt="" id="BLOGGER_PHOTO_ID_5657476722328236226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-5413807608528785144?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/5413807608528785144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=5413807608528785144&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/5413807608528785144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/5413807608528785144'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2011/09/oracle-openworld-2011-schedule-set.html' title='Oracle Openworld 2011 Schedule Set'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-EtFBnNneSww/ToNlGrdqcMI/AAAAAAAAAGU/a0E-52xqKkU/s72-c/sessions.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-4179399018241624353</id><published>2011-08-17T10:27:00.000-07:00</published><updated>2011-08-17T10:57:18.319-07:00</updated><title type='text'>Oracle Forms Builder will not start</title><content type='html'>Well I ran into an error that I found posted out on the Internet with no solution listed.  I just wanted to post my solution in case someone else is running into this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem:&lt;/span&gt; "All of sudden" today when I started Oracle Forms Builder 9i (yes we are using 1996 technology) I got Microsoft Visual C++ Runtime Library error Assertion failed! FRM-10039:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-S6XyMfhDgVk/Tkv7U2A0zkI/AAAAAAAAAGM/jdS_LU3OPNM/s1600/forms_startup_error.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 231px;" src="http://1.bp.blogspot.com/-S6XyMfhDgVk/Tkv7U2A0zkI/AAAAAAAAAGM/jdS_LU3OPNM/s320/forms_startup_error.jpg" alt="" id="BLOGGER_PHOTO_ID_5641879293726608962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cause:&lt;/span&gt;  A new Java Virtual Machine (JVM.DLL) was pushed out to our PCs.  Users were having problems with it.  While working out the user's JVM problems, I made a copy of JVM.DLL in the directory where I start Oracle Forms Builder.  When Oracle Forms Builder was starting it was using the local copy of JVM.DLL and not the copy in the directory where I installed Oracle Forms.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Fix:&lt;/span&gt; I deleted the copy of the JVM.DLL that was in my local directory.  Now Oracle Forms Builder is using the JVM.DLL that was provided by the Forms installation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Summary:&lt;/span&gt; If you get the Assertion Error when starting Oracle Forms Builder, check to see what JVM.DLL file is being used by Oracle Forms.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-4179399018241624353?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/4179399018241624353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=4179399018241624353&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/4179399018241624353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/4179399018241624353'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2011/08/oracle-forms-builder-will-not-start.html' title='Oracle Forms Builder will not start'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-S6XyMfhDgVk/Tkv7U2A0zkI/AAAAAAAAAGM/jdS_LU3OPNM/s72-c/forms_startup_error.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-5606301802746645212</id><published>2011-02-14T08:56:00.000-08:00</published><updated>2011-02-14T08:58:43.068-08:00</updated><title type='text'>How Oracle got to where it is today</title><content type='html'>Here is a great &lt;a href="http://www.oswoug.org/Slides/RN022010.pdf"&gt;presentation&lt;/a&gt; about the history of Oracle got to where it is today.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-5606301802746645212?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/5606301802746645212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=5606301802746645212&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/5606301802746645212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/5606301802746645212'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2011/02/how-oracle-got-to-where-it-is-today.html' title='How Oracle got to where it is today'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-1372026621927370629</id><published>2011-02-04T10:52:00.000-08:00</published><updated>2011-02-04T10:58:02.686-08:00</updated><title type='text'>Oracle Forms - 2011 Conference Missing In Action (MIA)</title><content type='html'>I was doing some 2011 training planning and was looking at some Oracle-related conferences for this year.  I noticed there are no Oracle Forms sessions at the IOUG Collaborate 11 and one "migrating off of Oracle Forms" session at ODTUG KSCOPE11.  Not a good indication for the future of Oracle Forms.&lt;br /&gt;&lt;br /&gt;If you know of any please post them as comments to the blog entry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-1372026621927370629?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/1372026621927370629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=1372026621927370629&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/1372026621927370629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/1372026621927370629'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2011/02/oracle-forms-2011-conference-missing-in.html' title='Oracle Forms - 2011 Conference Missing In Action (MIA)'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-6945709300737267116</id><published>2011-02-02T10:43:00.000-08:00</published><updated>2011-02-02T10:57:26.891-08:00</updated><title type='text'>Apex 4.0 Upgrade, Not Possible</title><content type='html'>Well I started looking at my 2011 projects and was getting excited about upgrading of our Oracle Apex version 3.1 to version 4.0 until I found out that Apex version 4.0 requires 10.2.0.3 or higher.  Unfortunately the main Apex repository we have is Oracle 9i!!  Barring moving the Apex repository (applications) to a different 10g database and setting up database links to "bridge" back to the data in the 9i database (ugly and messy), I am stuck with Apex 3.1 until the 9i database is upgraded to 10g.  Unfortunately that is dependent on a lot of non-Apex applications completely out of my control getting modified/upgraded.  Oh well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-6945709300737267116?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/6945709300737267116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=6945709300737267116&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6945709300737267116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6945709300737267116'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2011/02/apex-40-upgrade-not-possible.html' title='Apex 4.0 Upgrade, Not Possible'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-6282157267588313406</id><published>2011-01-18T07:01:00.000-08:00</published><updated>2011-01-18T07:06:25.069-08:00</updated><title type='text'>Oracle A.I.M. Retired</title><content type='html'>This morning I started doing some reading on Oracle Application Implementation Method (A.I.M.) 3.0.  I ran across the multitude of documents associated with it.  I remember back reading books on Oracle's CASE*Method.  Well while surfing for more information about A.I.M. I noticed that Oracle is retiring A.I.M. as of the end of this month (January).  Now I need to see if I can dig up information about &lt;strong&gt;&lt;span style="font-family:Arial, Helvetica, sans-serif;font-size:85%;"&gt;&lt;a href="http://www.oracle.com/partners/campaign/eblasts/retirement-aim-adv-bus-flows-185418.html"&gt;ORACLE&lt;sup&gt;®&lt;/sup&gt; UNIFIED METHOD (OUM)&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-6282157267588313406?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/6282157267588313406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=6282157267588313406&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6282157267588313406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6282157267588313406'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2011/01/oracle-aim-retired.html' title='Oracle A.I.M. Retired'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-4751213450023789570</id><published>2010-04-27T09:10:00.000-07:00</published><updated>2010-04-27T09:11:27.526-07:00</updated><title type='text'>Oracle's Database History</title><content type='html'>I have been working with Oracle since version 5 (1986).  It is always  interesting to try to remember when certain feature was added to the  database.  I found a link to an Oracle Magazine article which lists  Oracle's database history and more:&lt;br /&gt;&lt;br /&gt;http://www.oracle.com/technology/oramag/oracle/07-jul/o4730.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-4751213450023789570?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/4751213450023789570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=4751213450023789570&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/4751213450023789570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/4751213450023789570'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2010/04/oracles-database-history.html' title='Oracle&apos;s Database History'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-4928060006032570859</id><published>2009-12-18T12:03:00.000-08:00</published><updated>2010-01-11T10:11:48.704-08:00</updated><title type='text'>No code changed, but now ORA-01841. Mistery Solved</title><content type='html'>A report that is coded in PL/SQL that has existed for years "all of sudden" started generating a "ORA-01841: (full) year must be between -4713 and +9999, and not be 0" error.  Why and why all of sudden?&lt;br /&gt;&lt;br /&gt;I discovered that a data problem has existed for years.   When reports run they save results to a shared database table.  Later on in the reports, the reports delete some of the data that does not meet a given time period.  The table has both YEAR and MONTH  columns which are both numeric along with a unique primary key value generated from a sequence.  You guessed it, the YEAR column for a different type of report for some reason had a zero in it.  A DELETE statement in the report assembles a date value from the YEAR and MONTH values.  With a value of zero, this caused the error.&lt;br /&gt;&lt;br /&gt;What made it worse is I would then rerun the report and it would run through fine with no errors giving the correct expected values.  What was happening behind the scenes was the report with the bad data had finished and deleted all its zero year rows out of the table by the time I reran the report.  So the rerun went through fine with no errors.&lt;br /&gt;&lt;br /&gt;That explained why the error was occurring, but not why it had never appeared before.  The answer to this is our friend the Cost Based Optimizer (CBO).  I had computed new statistics on the report table.  With the prior statistics the CBO was applying a primary key WHERE clause criteria before assembling the date value from the YEAR and MONTH columns.  So the report never hit the "zero year" rows from the other reports running at the same time.  When I recomputed statistics on the report table it caused the CBO to change it access path and assemble the date value before applying the primary key restriction causing the Oracle error to appear.  The old CBO statistics were masking the fact that there was a data error in the table i.e. a year value of 0.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-4928060006032570859?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/4928060006032570859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=4928060006032570859&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/4928060006032570859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/4928060006032570859'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2009/12/no-code-changed-but-now-ora-01841.html' title='No code changed, but now ORA-01841. Mistery Solved'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-6474193949885714678</id><published>2009-09-22T08:09:00.000-07:00</published><updated>2009-09-22T08:15:45.365-07:00</updated><title type='text'>ODTUG  2010</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__MsbicWteEs/SrjpzuioBZI/AAAAAAAAAFE/zUn6F1QQ5KA/s1600-h/ODTUGKaleidoscope2010.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 53px;" src="http://1.bp.blogspot.com/__MsbicWteEs/SrjpzuioBZI/AAAAAAAAAFE/zUn6F1QQ5KA/s400/ODTUGKaleidoscope2010.jpg" alt="" id="BLOGGER_PHOTO_ID_5384310429397288338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Is this correct?  I found a link with a session schedule for the &lt;b&gt;ODTUG Kaleidoscope 2010&lt;/b&gt; conference in Washington, DC June 27 to July 1, 2010.  Is this accurate?  I do not see anything on the ODTUG web page.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://www.technicalconferencesolutions.com/pls/caat/caat_abstract_reports.schedule?conference_id=68&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-6474193949885714678?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/6474193949885714678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=6474193949885714678&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6474193949885714678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6474193949885714678'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2009/09/odtug-2010.html' title='ODTUG  2010'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__MsbicWteEs/SrjpzuioBZI/AAAAAAAAAFE/zUn6F1QQ5KA/s72-c/ODTUGKaleidoscope2010.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-3116596621842389082</id><published>2009-08-26T10:42:00.000-07:00</published><updated>2009-08-26T11:55:00.695-07:00</updated><title type='text'>NULLs in subqueries.</title><content type='html'>I ran into a basic query today that perplexed me.  I wanted to list all the values in one table (TABLE_A) that were not in another table (TABLE_B).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;SELECT value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     FROM table_a a&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; WHERE a.value NOT IN (SELECT DISTINCT b.value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                                                   FROM table_b b); &lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;TABLE_A had the value '82' in it. TABLE_B did not have '82'.  The query listed no rows.  It should have listed '82' right?  So thinking I was wrong and TABLE_B did have '82' in it, I tried:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;SELECT value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    FROM table_a a&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   WHERE a.value IN (SELECT DISTINCT b.value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                       FROM table_b b); &lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;and it did not list '82'.  '82' is in TABLE_A and it is either 'IN' or 'NOT IN' TABLE_B.  Why doesn't either query list '82'?  So I rewrote the query to:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;SELECT *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   FROM table_a a&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  WHERE NOT EXISTS (SELECT *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                      FROM table_b b&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                     WHERE a.value = b.value);&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;and '82' was listed.  So I looked at the EXPLAIN PLANs for both queries and noticed that the 'NOT IN' query was using the LNNVL function.  So I looked at the rows being returned by my subquery.  One of the rows had a NULL value.  The LNNVL was making the '82' equal to the NULL value causing it to not list.  So I changed my query to:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;SELECT value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    FROM table_a a&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   WHERE a.value NOT IN (SELECT DISTINCT b.value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                           FROM table_b b&lt;br /&gt;                       WHERE b.value IS NOT NULL); &lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;That fixed it.  The moral of the story is, 'Always be aware of NULL values'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-3116596621842389082?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/3116596621842389082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=3116596621842389082&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/3116596621842389082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/3116596621842389082'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2009/08/nulls-in-subqueries.html' title='NULLs in subqueries.'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-1499638581475451533</id><published>2009-05-13T12:18:00.000-07:00</published><updated>2009-05-13T12:37:33.957-07:00</updated><title type='text'>Reserved Words as Oracle Column Names</title><content type='html'>I saw a post on the web asking if one could create an Oracle table in which a column name was an Oracle reserved word like "TO" or "FROM".  Now, not that I would do this, but it &lt;span id="query" class="query"&gt;intrigued me, so I tried:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;SQL&gt; create table bogus (to varchar2(2));&lt;br /&gt;create table bogus (to varchar2(2))&lt;br /&gt;                    *&lt;br /&gt;ERROR at line 1:&lt;br /&gt;ORA-00904: : invalid identifier&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SQL&gt; CREATE TABLE bogus AS&lt;br /&gt;   2  SELECT dummy "TO", dummy "FROM" FROM DUAL;&lt;br /&gt;&lt;br /&gt;Table created.&lt;br /&gt;&lt;br /&gt;SQL&gt; desc bogus&lt;br /&gt;Name  Null?    Type&lt;br /&gt;----- ----- --------------------------&lt;br /&gt;TO          VARCHAR2(1)&lt;br /&gt;FROM                     VARCHAR2(1)&lt;br /&gt;&lt;br /&gt;SQL&gt; select * from bogus;&lt;br /&gt;&lt;br /&gt;TO FROM&lt;br /&gt;-- ----&lt;br /&gt;X    X&lt;br /&gt;&lt;br /&gt;SQL&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/span&gt;I started up SQL Developer to see what the CREATE TABLE statement would be for the BOGUS table:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;CREATE TABLE "BOGUS"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;("TO"   VARCHAR2(1),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; "FROM" VARCHAR2(1))&lt;/span&gt;;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;To select from the BOGUS table:&lt;br /&gt;&lt;br /&gt;&lt;span id="query" class="query"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span id="query" class="query"&gt;&lt;span style="font-family:courier new;"&gt;SQL&gt; select "TO", "FROM" from bogus;&lt;br /&gt;&lt;br /&gt;TO FROM&lt;br /&gt;-- ----&lt;br /&gt;X    X&lt;br /&gt;&lt;br /&gt;SQL&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;There it is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-1499638581475451533?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/1499638581475451533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=1499638581475451533&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/1499638581475451533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/1499638581475451533'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2009/05/reserved-words-as-oracle-column-names.html' title='Reserved Words as Oracle Column Names'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-7596315401921171383</id><published>2009-02-23T12:56:00.000-08:00</published><updated>2009-02-23T13:03:59.698-08:00</updated><title type='text'>APEX SQL Workshop Insufficient Privileges Error</title><content type='html'>An APEX user was attempting to create a table in the SQL Workshop and received the "ORA-01031 insufficient privileges" error message.  I went into SQL Developer and was able to create the table.  So why did it not work in APEX SQL Workshop?&lt;br /&gt;&lt;br /&gt;After some "data dictionary" digging comparing this schema to one that works, I realized that the CREATE TABLE privilege was granted to the schema via a role and not a direct grant.  Since APEX runs within PL/SQL you have to have the CREATE TABLE grant issued directly to the schema to be able to create a table in APEX.  You cannot grant the privilege via a database role.&lt;br /&gt;&lt;br /&gt;I just thought that I would post this in case someone else runs into this problem and so I will have the answer when the problem comes up again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-7596315401921171383?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/7596315401921171383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=7596315401921171383&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/7596315401921171383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/7596315401921171383'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2009/02/apex-sql-workshop-insufficient.html' title='APEX SQL Workshop Insufficient Privileges Error'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-2948602898843281145</id><published>2009-02-17T12:10:00.001-08:00</published><updated>2009-02-17T12:48:46.923-08:00</updated><title type='text'>Oracle Reserved word as a Table name</title><content type='html'>I ran into a table today that was named GROUP, so I attempted to do a&lt;br /&gt;&lt;blockquote&gt;SELECT * FROM GROUP;&lt;/blockquote&gt;Since GROUP is a reserved word in Oracle, I got an "ORA-00903: invalid table name" error.  So how do I query the table?  I went into SQL Developer and was able to view the data in the table via the "Data" tab.  So how was that possible?  It ended up SQL Developer was doing a&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;SELECT * FROM "GROUP";&lt;/blockquote&gt;&lt;br /&gt;I knew that SQL Developer placed double quotes around the schema, table, and column names in the CREATE TABLE statements in the "SQL" tab because those names could be mixed case.  But the double quotes also allow those names to be reserved words as well.&lt;br /&gt;&lt;br /&gt;NOTE: In my humble opinion naming tables or columns a reserved word is not a good thing to do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-2948602898843281145?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/2948602898843281145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=2948602898843281145&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/2948602898843281145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/2948602898843281145'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2009/02/oracle-reserved-word-as-table-name.html' title='Oracle Reserved word as a Table name'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-401971647156514015</id><published>2009-02-03T09:40:00.000-08:00</published><updated>2009-02-03T10:34:48.230-08:00</updated><title type='text'>ORDER BY Clause in "Filter" field In SQL Developer</title><content type='html'>I was in SQL Developer today and discovered something by accident.   I double clicked on a table name in the "Connections" tab and went to the "Data" tab to view rows of data.  In the "Filter:" field I entered a WHERE clause but accidentally also included an ORDER BY clause, too.   The rows of data displayed in the order I requested.   This got me to thinking.   The "Sort" button provides a basic column by column sorting order, but if you need more complicated sorting logic you could just type it into the "Filter:" field.&lt;br /&gt;&lt;br /&gt;This is useful if you want to edit a set of rows in a particular order.  For example in our friend the EMP table, we could list all the rows where their salary is greater than 2000 listing the president first, analysts second, and all others third:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__MsbicWteEs/SYiE9N-qUZI/AAAAAAAAAEQ/rKeTD8UDtVc/s1600-h/emp.jpg"&gt;&lt;img style="cursor: pointer; width: 662px; height: 236px;" src="http://1.bp.blogspot.com/__MsbicWteEs/SYiE9N-qUZI/AAAAAAAAAEQ/rKeTD8UDtVc/s320/emp.jpg" alt="" id="BLOGGER_PHOTO_ID_5298631148860756370" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-401971647156514015?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/401971647156514015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=401971647156514015&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/401971647156514015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/401971647156514015'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2009/02/order-by-clause-in-filter-field-in-sql.html' title='ORDER BY Clause in &quot;Filter&quot; field In SQL Developer'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__MsbicWteEs/SYiE9N-qUZI/AAAAAAAAAEQ/rKeTD8UDtVc/s72-c/emp.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-3384617894841637456</id><published>2008-11-25T10:53:00.000-08:00</published><updated>2008-11-25T10:57:16.382-08:00</updated><title type='text'>"When All Else Fails..."</title><content type='html'>This is on a shirt that I received as a present at work today.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__MsbicWteEs/SSxKREsaVtI/AAAAAAAAAEI/ITc6JQ7zPZY/s1600-h/11-25-08_1344.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/__MsbicWteEs/SSxKREsaVtI/AAAAAAAAAEI/ITc6JQ7zPZY/s320/11-25-08_1344.jpg" alt="" id="BLOGGER_PHOTO_ID_5272670920922257106" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-3384617894841637456?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/3384617894841637456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=3384617894841637456&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/3384617894841637456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/3384617894841637456'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/11/when-all-else-fails.html' title='&quot;When All Else Fails...&quot;'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__MsbicWteEs/SSxKREsaVtI/AAAAAAAAAEI/ITc6JQ7zPZY/s72-c/11-25-08_1344.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-8940896163172935628</id><published>2008-11-10T06:42:00.001-08:00</published><updated>2008-11-25T11:42:04.530-08:00</updated><title type='text'>Our "Friend" ORA-01555</title><content type='html'>Have you ever had your Oracle program ever get the dreaded ORA-01555: snapshot too old: rollback segment number 10 with name "_SYSSMU10$" too small&lt;execute load="" of="" adj_triangle_adj="" from="" adjustments=""&gt;&lt;/execute&gt; error, you rerun the program,  and it runs to completion with no errors?  No changes to the code.  No changes to the program parameters.  No changes to the database. You just rerun the program and it works.  As an application developer I would just say that the DBA needs to increase the amount of snapshot space and leave it up to the DBA to handle it.  But since it is not a re-creatable event, the DBA could not do anything because we could not tell how much to increase the rollback space...&lt;br /&gt;&lt;br /&gt;Well I ran into this sporadically at work recently and was able to overcome the problem.&lt;execute load="" of="" adj_triangle_adj="" from="" adjustments=""&gt;&lt;/execute&gt; I overcame the problem with a programming change and not a database change.  Basically the application when it was complete was deleting data out of a number of tables.  We had some deletes inside of a cursor loop at the program's end.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;FOR info IN cursor_x LOOP&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  DELETE FROM table1 WHERE ...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  DELETE FROM table2 WHERE ...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  &lt;/span&gt;...&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;END LOOP.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I finally determined that the problem was one iteration through the loop was deleting so much data that the database was cycling through the rollback space and when the cursor got to the top of the loop and attempted to get the next row of "info" the error would appear.  So it was not the delete, but the "get" of the the row.  The snap shot was too old.  The database could not locate the next row of data in the cursor loop.&lt;br /&gt;&lt;br /&gt;What was causing the sporadic nature of this problem was that we would have up to three of these programs running &lt;span class="query"&gt;simultaneously&lt;/span&gt;.  Some runs deleted small amounts of data and others deleted large amounts of data.  If the programs were single threaded there was no problems.  So the rollback space was large enough for one program to run, but multiple runs with at least one deleting a large amount of data would not work.  In my option single threading the programs was not a fix.  It was just a work around.&lt;br /&gt;&lt;br /&gt;So since the data used for the cursor loop was not affected by the DELETEs inside the loop I did a BULK COLLECT and iterated through the array like:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;OPEN cursor_x;&lt;br /&gt;FETCH cursor_x INTO info;&lt;br /&gt;CLOSE cursor_x;&lt;br /&gt;&lt;br /&gt;FOR i IN 1 .. info.COUNT LOOP&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;"&gt;  DELETE FROM table1 WHERE ...&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;"&gt;  DELETE FROM table2 WHERE ...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  &lt;/span&gt;...&lt;br /&gt; &lt;span style="font-family: courier new;"&gt;END LOOP.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I figured I would share this in case you run into it.  Usually I see the issue discussed from a DBA's perspective and not the programmer's perspective.&lt;br /&gt;&lt;br /&gt;We have had no problems since.  I had better not say that too loudly, the Oracle kernel may hear me;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-8940896163172935628?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/8940896163172935628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=8940896163172935628&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/8940896163172935628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/8940896163172935628'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/11/our-friend-ora-01555.html' title='Our &quot;Friend&quot; ORA-01555'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-1900761738803383888</id><published>2008-09-25T08:05:00.000-07:00</published><updated>2008-09-25T09:41:22.857-07:00</updated><title type='text'>Diving into Java</title><content type='html'>Well I finally wrote my first professional Java program.  It was professional in the sense that it did more than "Hello World" and was for work.  There was data made available on an external Internet web page.  To get the data the users had to: select from 4 drop down lists, press a button, copy the data out of MS Notepad, paste the data into Excel.  The kicker was to get all the data they were going to have to do this process 3,591 times.  My challenge was to automate the download of all this data off the web page directly into our Oracle database.  This is the story of my two week "Dive into Java".&lt;br /&gt;&lt;br /&gt;I first started looking at automated web page testing software to see if I could script the series of clicks.  It became apparent quite quickly that I would be able to handle the clicks, but not the copy and paste of the data out of MS Notepad into Excel.&lt;br /&gt;&lt;br /&gt;I then started looking at the external web page.  I "inspected" the source code using &lt;a href="https://addons.mozilla.org/firefox/addon/1843"&gt;Firebug&lt;/a&gt; to see all the values for the 4 drop down lists and got to thinking that if I could simulate these actions in Java maybe there would be a way of capturing the web page results to a text file that could be loaded into the database.  So I started looking into Java.  Keep in mind that I had read &lt;a href="http://www.amazon.com/Mastering-Java-2-John-Zukowski/dp/0782121802"&gt;Mastering Java 2&lt;/a&gt; 5 years ago and only written &lt;a href="http://java.sun.com/docs/books/tutorial/getStarted/application/index.html"&gt;HelloWorld.java&lt;/a&gt;. All of the people that got formal Java and J2EE training in our department have left the company, so I had "hack" my way through this.&lt;br /&gt;&lt;br /&gt;I discussed the issue with a colleague of mine.  He gave me a &lt;a href="http://journals.ecs.soton.ac.uk/java/tutorial/networking/urls/readingWriting.html"&gt;small snippet of Java code&lt;/a&gt; which connected to a web page and wrote the results to standard output.  If I could take this code, loop through the permutations of the 4 drop down lists (arrays), and write the results out to a text file, I would have the data.&lt;br /&gt;&lt;br /&gt;I first had to get into a Java &lt;a href="http://en.wikipedia.org/wiki/Integrated_development_environment"&gt;IDE&lt;/a&gt;, &lt;a href="http://www.oracle.com/technology/products/jdev"&gt;Oracle JDeveloper&lt;/a&gt;.  I was slightly familiar with it.  I had used it for the Entity Relationship diagrammer.  I had to get used to how projects mapped over to directories.  That was not too bad.&lt;br /&gt;&lt;br /&gt;My next challenge was that the Java program program was unable to get out through the our firewall at work.  I could only run it at home where I had a direct connect to the Internet.  Abstract class &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/net/URLConnection.html"&gt;URLConnection&lt;/a&gt; (wow I sound like a Java developer) could not get through the firewall.  I got to thinking, Java applications like JDeveloper connect out through the firewall by prompted for my firewall ID and password.  So I did some searching on the Internet and found &lt;a href="http://www.developer.com/java/other/article.php/1551421"&gt;Authenticator.setDefault&lt;/a&gt;.  With this I was able to get through the firewall out to the external web page, but I had to hard code an ID and password into the Java program.  That had to change, so now I had to dig into "prompting" the user for the information.&lt;br /&gt;&lt;br /&gt;So I did yet more Internet surfing (see a pattern here) and came up with &lt;a href="http://www.cs.indiana.edu/classes/a201-dger/sum2007/java/v1/v1ch9/DataExchangeTest/DataExchangeTest.java"&gt;DataExchangeTest.java&lt;/a&gt; from the &lt;a href="http://books.google.com/books?id=W6bomXWB-TYC&amp;amp;pg=PT1408&amp;amp;lpg=PT1408&amp;amp;dq=%2B%22dataexchangetest.java%22&amp;amp;source=web&amp;amp;ots=4rG8QNxsnO&amp;amp;sig=AtfKJllVkWBV7FeDWZRVw5zzWTg&amp;amp;hl=en&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;resnum=6&amp;amp;ct=result"&gt;Core Java 2 Fundamentals&lt;/a&gt;.  I now was able to prompt for my firewall ID and password and got rid of all hard coding. (Trust me it is all gone.)  This got me into Java Swing/AWT (more Java alphabet soup).&lt;br /&gt;&lt;br /&gt;Now I could run the Java program from computer at work.  The program created a text file on my computer which I had to FTP to my database server, SQL*Load the file into a database staging table, and run a data parsing database procedure to populate the final destination tables.  Could I write the data into the staging table in the database, taking SQL*Load out of the picture, and "kick off" the data parsing procedure from Java? Here comes JDBC.   More surfing gave me &lt;a href="http://java.sun.com/docs/books/tutorial/jdbc/overview/index.html"&gt;JDBC&lt;/a&gt; basics so I could "write" the data directly into the database and populate the destination table.&lt;br /&gt;&lt;br /&gt;My next step is to run the Java as a regularly scheduled batch job.  It could get the latest released data and publish what the differences are.  This is not a user requirement yet.  Maybe I will take that on in my "spare time".&lt;br /&gt;&lt;br /&gt;Wow, what a two-week long struggle with no training, but I did it.  I can now put Java on my resume, not yet.&lt;br /&gt;&lt;br /&gt;Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-1900761738803383888?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/1900761738803383888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=1900761738803383888&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/1900761738803383888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/1900761738803383888'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/09/diving-into-java.html' title='Diving into Java'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-8155741335426506031</id><published>2008-09-01T07:02:00.000-07:00</published><updated>2008-09-01T07:13:15.476-07:00</updated><title type='text'>Last day of "Spring Cleaning"</title><content type='html'>Tomorrow is my last day of &lt;a href="http://mikerife.blogspot.com/2008/08/more-spring-cleaning.html"&gt;spring cleaning&lt;/a&gt; at work. Since I received no suggestions as to what to do with the old &lt;a href="http://mikerife.blogspot.com/2008/08/where-does-old-oracle-software-and.html"&gt;Oracle software and documentation&lt;/a&gt;, I am going to through it away in the junk tomorrow.&lt;br /&gt;&lt;br /&gt;Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-8155741335426506031?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/8155741335426506031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=8155741335426506031&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/8155741335426506031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/8155741335426506031'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/09/last-day-of-spring-cleaning.html' title='Last day of &quot;Spring Cleaning&quot;'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-8935958725089770338</id><published>2008-08-27T06:02:00.000-07:00</published><updated>2008-08-27T07:05:14.583-07:00</updated><title type='text'>More "Spring Cleaning"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__MsbicWteEs/SLVV9knY2gI/AAAAAAAAADg/5zvk_YSX0-o/s1600-h/08-26-08_1606.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/__MsbicWteEs/SLVV9knY2gI/AAAAAAAAADg/5zvk_YSX0-o/s320/08-26-08_1606.jpg" alt="" id="BLOGGER_PHOTO_ID_5239188257804704258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Well I continued my "Spring Cleaning" at work.  I dug into the Oracle software and documentation drawers.  After having developed Oracle-based software since 1987, I get sentimental about older versions of software documentation that I spent a lot of time reading and working with.  It is always nice to see where you have been so you can hopefully appreciate where are.  (See my next blog entry for a complete list of Oracle software and documentation I found.)&lt;br /&gt;&lt;br /&gt;Oracle used to actually publish bound documentation book sets.  That was before CD ROMs and the Internet.  I remember these were prized possessions.  It was very expensive to buy extra sets, well expensive for the places that I have worked.  So if you had a set of books for SQL*Forms for example, you were popular with all the other developers who were developing Forms applications.&lt;br /&gt;&lt;br /&gt;Back in 1987 I started with &lt;a href="http://en.wikipedia.org/wiki/Oracle_Forms"&gt;SQL*Forms v2.0&lt;/a&gt; and Oracle 5. Prior to v2.0 you had FastForms where to develop a screen you had to answer tons of questions.  It was a question and answer session to develop a Form.  I found SQL*Forms v2.0 documentation but known for Oracle 5.  I did find Oracle 6 RDBMS manuals though.  Here are some that I found that have sentimental value to me.  Hopefully they bring back good memories for you.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__MsbicWteEs/SLVU0KUFAvI/AAAAAAAAADY/zJVWdrH-aJg/s1600-h/08-26-08_1604.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/__MsbicWteEs/SLVU0KUFAvI/AAAAAAAAADY/zJVWdrH-aJg/s320/08-26-08_1604.jpg" alt="" id="BLOGGER_PHOTO_ID_5239186996613939954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;SQL*Forms Designer Quick Reference from 1987&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__MsbicWteEs/SLVS2UXKqmI/AAAAAAAAADA/UTtnyUvYwcA/s1600-h/08-26-08_1555.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/__MsbicWteEs/SLVS2UXKqmI/AAAAAAAAADA/UTtnyUvYwcA/s320/08-26-08_1555.jpg" alt="" id="BLOGGER_PHOTO_ID_5239184834647730786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;IBM DOS v3.30 docs and software 3.5" and 5.25" media from April 1987&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__MsbicWteEs/SLVTmRjkUJI/AAAAAAAAADI/OjdTNtRW0l4/s1600-h/08-26-08_1557.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/__MsbicWteEs/SLVTmRjkUJI/AAAAAAAAADI/OjdTNtRW0l4/s320/08-26-08_1557.jpg" alt="" id="BLOGGER_PHOTO_ID_5239185658528157842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;IBM OS/2 v1.10 from 1988&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__MsbicWteEs/SLVUloYGUsI/AAAAAAAAADQ/Lac0b2YXk0g/s1600-h/08-26-08_1559.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/__MsbicWteEs/SLVUloYGUsI/AAAAAAAAADQ/Lac0b2YXk0g/s320/08-26-08_1559.jpg" alt="" id="BLOGGER_PHOTO_ID_5239186746985829058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Oracle Office Demo Disk from September 1993&lt;br /&gt;&lt;br /&gt;Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-8935958725089770338?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/8935958725089770338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=8935958725089770338&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/8935958725089770338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/8935958725089770338'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/08/more-spring-cleaning.html' title='More &quot;Spring Cleaning&quot;'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/__MsbicWteEs/SLVV9knY2gI/AAAAAAAAADg/5zvk_YSX0-o/s72-c/08-26-08_1606.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-2924813542924708311</id><published>2008-08-26T12:54:00.000-07:00</published><updated>2008-08-27T07:18:55.461-07:00</updated><title type='text'>Where does old Oracle software and documentation go?</title><content type='html'>As indicated in my previous post, I did more "spring" cleaning at work and got hold of some old Oracle software and documentation. Some old documentation like SQL*Forms v3.0 and Oracle7 (RDBMS) Server I actually had to leave in the cabinet because we still have production applications written in them believe it or not.  They are running on an old DEC VAX/VMS.&lt;br /&gt;&lt;br /&gt;So , where does all that old Oracle software and documentation go when it is superseded by a newer version?  Is there an Oracle recycling center out at Redwood Shore?  Is there an Oracle historical society or museum that would want this "stuff"?&lt;br /&gt;&lt;br /&gt;What should I do with the software and documentation? Is it of use to anyone out there? Should I just throw it all out? Please post your serious and funny suggestions. Oh ya, let me know if you may want this "stuff", too.&lt;br /&gt;&lt;br /&gt;Here is what I got hold of:&lt;br /&gt;&lt;br /&gt;Oracle Software (all media is CD ROM except where noted)&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Oracle Office Demo Disk September 1993 (3.5" media)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;OTN IOUG-A Live 2000 Software Kit&lt;/li&gt;&lt;li&gt;-Oracle WebDB v2.2 Linux&lt;/li&gt;&lt;li&gt;-Oracle8i Enterprise Edition 8.1.5 Linux&lt;/li&gt;&lt;li&gt;-Oracle8i Enterprice Ed. R2 MS Win NT/2000 V8.1.6&lt;/li&gt;&lt;li&gt;-Oracle WebDB v2.2  MS Win NT&lt;/li&gt;&lt;li&gt;-Oracle JDeveloper 3.1  MS Win NT&lt;/li&gt;&lt;li&gt;Oracle Discover v4.1.27&lt;/li&gt;&lt;li&gt;Oracle JDeveloper R3.2.3&lt;/li&gt;&lt;li&gt;Oracle8i Lite v4.0.0.2.0&lt;/li&gt;&lt;li&gt;Oracle Tools CD Pack MS Windows&lt;/li&gt;&lt;li&gt;-Oracle Designer R6.0&lt;/li&gt;&lt;li&gt;-Oracle8i Lite v4.0.0.2.0&lt;/li&gt;&lt;li&gt;-Oracle8i Personal Edition v8.1.5&lt;/li&gt;&lt;li&gt;-Oracle JDeveloper R3.2.3&lt;/li&gt;&lt;li&gt;-Oracle Forms and Reports 6i R2&lt;/li&gt;&lt;li&gt;-Oracle Discoverer 3i&lt;/li&gt;&lt;li&gt;-Oracle JDeveloper R3.1&lt;/li&gt;&lt;li&gt;-Oracle Application Server Enterprise Edition v4.0.8.1&lt;/li&gt;&lt;li&gt;Oracle9i Application Server v1.0.2.2.2 CD Pack Sun SPARC Solaris&lt;/li&gt;&lt;li&gt;Oracle OpenWorld 2000 Software Kit&lt;/li&gt;&lt;li&gt;-Oracle Internet Application Server 8i Linux and MS Windows NT&lt;/li&gt;&lt;li&gt;-Oracle Warehouse Builder v2.0.4.78.0 MS Windows NT&lt;/li&gt;&lt;li&gt;-Oracle Workflow R2.5.1&lt;/li&gt;&lt;li&gt;-Oracle WebDB v2.2 Linux and MS Windows NT&lt;/li&gt;&lt;li&gt;-Oracle Internet File Server R1.0 MS Windows NT&lt;/li&gt;&lt;li&gt;-Oracle8i Enterprise Edition R2 Linux and MS Windows NT&lt;/li&gt;&lt;li&gt;-Oracle Portal-to-Go v1.0.2.1&lt;/li&gt;&lt;li&gt;Oracle Database 8i R2 Sun SPARC Solaris&lt;/li&gt;&lt;li&gt;-Oracle8i Standard Edition R2&lt;/li&gt;&lt;li&gt;-Oracle8i Enterprise  Edition R2&lt;/li&gt;&lt;li&gt;-Oracle Internet File Server&lt;/li&gt;&lt;li&gt;-Oracle Enterprise Manger&lt;/li&gt;&lt;li&gt;-Oracle Workflow&lt;/li&gt;&lt;li&gt;-Oracle eMail Server&lt;/li&gt;&lt;li&gt;-Oracle Darwin Data Mining Suite&lt;/li&gt;&lt;li&gt;-Oracle Express Server&lt;/li&gt;&lt;li&gt;-Oracle Transparent Gateways (many)&lt;/li&gt;&lt;li&gt;-Oracle Warehouse Builder&lt;/li&gt;&lt;li&gt;-Oracle Geocode&lt;/li&gt;&lt;li&gt;-Oracle Pure Name and Address&lt;/li&gt;&lt;li&gt;-Oracle WebD v2.2&lt;/li&gt;&lt;li&gt;Oracle9i Application Server R1 MS Windows NT&lt;/li&gt;&lt;li&gt;ODTUG Kaleidoscope 2007 (4 copies)&lt;/li&gt;&lt;li&gt;Oracle JDeveloper v2.0 (4 copies)&lt;/li&gt;&lt;li&gt;Oracle Application Server v4.0.7 MS Windows NT&lt;/li&gt;&lt;li&gt;Oracle Application Server v3.0.0 MS Windows NT&lt;/li&gt;&lt;li&gt;Oracle Webserver v2.1.1 Sun SPARC Solaris&lt;/li&gt;&lt;li&gt;Oracle Designer R6 MS Windows 95/98/NT&lt;/li&gt;&lt;li&gt;Oracle Designer R2.1.2 MS Windows 95/98/NT&lt;/li&gt;&lt;li&gt;Developer/2000 v2.0 MS Windows NT&lt;/li&gt;&lt;li&gt;Oracle Developer v6.0 MS Windows 95/98/NT&lt;/li&gt;&lt;li&gt;Oracle Developer/2000 R2.1 MS Windows NT&lt;/li&gt;&lt;li&gt;Oracle Developer Server v2.0 MS Windows NT Patch 1 (2 copies)&lt;/li&gt;&lt;li&gt;Oracle8 Personal Edition MS Windows NT&lt;/li&gt;&lt;li&gt;Oracle Server Enterprise Edition v7.3.4.0.1 Sun SPARC Solaris&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Oracle Documentation&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Oracle Procedure Builder&lt;/li&gt;&lt;li&gt;Oracle Forms 4.5&lt;/li&gt;&lt;li&gt;Oracle Reports 2.5&lt;/li&gt;&lt;li&gt;Oracle Graphics 2.5&lt;/li&gt;&lt;li&gt;Oracle Glue&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Oracle8 Personal Edition&lt;/li&gt;&lt;li&gt;Oracle Designer Handbook&lt;/li&gt;&lt;li&gt;Develop Oracle Forms Applications&lt;/li&gt;&lt;li&gt;Oracle V6.0 SQL Reference Manual&lt;/li&gt;&lt;li&gt;Oracle V6.0 Error Codes&lt;/li&gt;&lt;li&gt;Oracle V6.0 DQC VAX/VMS Installation Guide&lt;/li&gt;&lt;li&gt;Oracle V6.0 OCI&lt;/li&gt;&lt;li&gt;Oracle7 Concepts&lt;/li&gt;&lt;li&gt;Oracle7 User's Guide&lt;/li&gt;&lt;li&gt;Oracle7 SQL Language (2 copies)&lt;/li&gt;&lt;li&gt;Oracle7 Utility User's Guide&lt;/li&gt;&lt;li&gt;Oracle7 Application Developer's Guide&lt;/li&gt;&lt;li&gt;Oracle PL/SQL v2.0 User's Guide and Reference&lt;/li&gt;&lt;li&gt;Oracle Call Interface Guide v7.0&lt;/li&gt;&lt;li&gt;SQL*Forms v2.0 Designer's Quick Reference&lt;/li&gt;&lt;li&gt;SQL*Forms v2.3 Designer's Quick Reference&lt;/li&gt;&lt;li&gt;SQL*Forms v2.3 Operator's Quick Reference&lt;/li&gt;&lt;li&gt;SQL*Plus v2.0 Quick Reference&lt;/li&gt;&lt;li&gt;Oracle Keyboard Layout Templates for SQL*Forms Operator and Designer for the PC, VT100, ...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-2924813542924708311?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/2924813542924708311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=2924813542924708311&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/2924813542924708311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/2924813542924708311'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/08/where-does-old-oracle-software-and.html' title='Where does old Oracle software and documentation go?'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-1611091180143194565</id><published>2008-08-20T09:41:00.000-07:00</published><updated>2008-08-20T10:44:48.064-07:00</updated><title type='text'>"Spring Cleaning" in the Summer</title><content type='html'>I started doing some "Spring Cleaning" at work.  I am looking into my cabinets and drawers and checking to see what is needed and what is not.  What an undertaking.  I found some interesting older Oracle/database related things:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A 1983 article that explains &lt;a href="http://www.cpcstech.com/pdf/simple-guide-to-five-normal-forms-in-relational-database-theory.pdf"&gt;5th Normal Form&lt;/a&gt;.  It was ironic because just the other day I was talking with our team lead about application developers not knowing data normalization.&lt;/li&gt;&lt;li&gt;Copies of Oracle 7.2 Server manuals (I started with Oracle 5)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Oracle Forms (V4) training manuals (I started with Forms 2.0)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PL/SQL (Version 2.0) training manuals&lt;/li&gt;&lt;li&gt;Developer/2000 Forms 4.5 training manuals&lt;/li&gt;&lt;li&gt;Developer/2000 Oracle Graphics 2.5 Reference Manual&lt;/li&gt;&lt;li&gt;Oracle CDE2 Oracle Reports 2.5 manuals&lt;/li&gt;&lt;/ul&gt;Boy the days of getting the box sets of Oracle manuals is over. It is time to put these in the dumpster.  The only thing that is useful now is the normalization document.  I will still dump it because it is on the Internet.&lt;br /&gt;&lt;br /&gt;Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-1611091180143194565?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/1611091180143194565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=1611091180143194565&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/1611091180143194565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/1611091180143194565'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/08/spring-cleaning-in-summer.html' title='&quot;Spring Cleaning&quot; in the Summer'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-5285309561613736524</id><published>2008-08-12T12:37:00.000-07:00</published><updated>2008-08-12T14:01:16.652-07:00</updated><title type='text'>Is Data Normalization and Modeling on the decrease?</title><content type='html'>Because of recent staff turnover in our department at work, we created a list of technical skills that we need to support our department's in-house developed database applications.  These were skills like SQL, PL/SQL, Oracle Forms, J2EE, AJAX, Javascript, Unix shell scripting, ...  Each person in our department assessed their individual level of expertise in each skill.  We then assigned a weight as to which skills we needed to fill immediately and which skills we could wait on for a while.&lt;br /&gt;&lt;br /&gt;After two passes of looking at the skills list and assigning weights, I noticed that there were no analysis and design skills like Data Modeling and Data Normalization or modeling tools or methodologies.  We had completely forgot to include these, so I suggested adding them.  All of us were thinking of application development skills and not analysis and design skills.&lt;br /&gt;&lt;br /&gt;That led me the question of, "Is it just my particular situation or is it a general trend in the IT industry that Data Normalization and Data Modeling skills/methodologies like ER diagrams are not being used as much as they used to like back in the 1990's?"  Or is Data Normalization such a common skill nowadays that people creating tables just automatically do it?  Is it now being taught in college?&lt;br /&gt;&lt;br /&gt;Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-5285309561613736524?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/5285309561613736524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=5285309561613736524&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/5285309561613736524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/5285309561613736524'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/08/is-data-normalization-and-modeling-on.html' title='Is Data Normalization and Modeling on the decrease?'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-6248790754052688268</id><published>2008-07-30T10:23:00.000-07:00</published><updated>2008-07-30T10:32:39.691-07:00</updated><title type='text'>Check your iDS (Oracle Forms) version and support</title><content type='html'>Since I am now temporarily working in Oracle Forms, I looked at our version of the Forms Builder, 9.0.2.9.0.  I found out it was just desupported by Oracle on 01-JUL-08 (Oracle Document ID: 283326.1).  Ok I looked at the next version 9.0.4.  Oracle is desupporting it on 31-DEC-08 (Oracle Document ID: 298788.1).  Well I guess 10g R2 (10.1.2.2) is what we should go to.  The company I work does not like to go to first releases of software.  I am glad they do not do that for our in-house developed software.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-6248790754052688268?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/6248790754052688268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=6248790754052688268&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6248790754052688268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6248790754052688268'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/07/check-your-ids-oracle-forms-version-and.html' title='Check your iDS (Oracle Forms) version and support'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-1674938664726905273</id><published>2008-07-29T11:07:00.000-07:00</published><updated>2008-07-29T11:45:16.282-07:00</updated><title type='text'>Simulate set_item_property('Block.item', intial_value, 'VALUE'); in Oracle Forms</title><content type='html'>Have you ever wanted to programmatically set and change the initial value of Oracle Form item at run time?  Have you to do something like this in your Oracle Form?&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;set_item_property('Block.item', intial_value, 'VALUE')&lt;/blockquote&gt;&lt;br /&gt;and received the following error when you attempt to compile your form:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;Error 201 at line .., column .. identifier 'INITIAL_VALUE' must be declared'&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Well I have found a way to emulate having a dynamic value for the "Initial Value" property of an item.&lt;br /&gt;&lt;br /&gt;1) Add a non-database item to your block.  Call the item something like 'your_item_initial_value'&lt;br /&gt;&lt;br /&gt;2) Set the "Copy Value from Item" property on your item to be your_block.your_item_initial_value&lt;br /&gt;&lt;br /&gt;3) Whenever you want to change the initial value of your item just assign a value to the your_item_initial_value item.&lt;br /&gt;&lt;br /&gt;4) Whenever you want to remove an initial value from your item just assign NULL to the your_item_initial_value item.&lt;br /&gt;&lt;br /&gt;Note: I am using Oracle9iDS Release 2.  Newer versions of iDS may permit you to programmatically change the initial value.&lt;br /&gt;&lt;br /&gt;Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-1674938664726905273?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/1674938664726905273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=1674938664726905273&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/1674938664726905273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/1674938664726905273'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/07/simulate-setitempropertyblockitem.html' title='Simulate set_item_property(&apos;Block.item&apos;, intial_value, &apos;VALUE&apos;); in Oracle Forms'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-5184645317389214694</id><published>2008-07-29T07:12:00.000-07:00</published><updated>2008-07-29T07:27:36.409-07:00</updated><title type='text'>Multiple PL/SQL Editors Open in Oracle Forms Builder</title><content type='html'>This blog entry is for my own purpose.  It is a little thing that I seem to frequently forget in Oracle Forms Builder.  Nowadays I am still sporadicly working in Forms.   Actually I am the only Forms developer left in our shop and we have quite a few production Forms applications.  I actually love Oracle Forms, but our department has on its long term plan to move off of Forms to either J2EE or ApEx, but that is a topic for another future blog entry.&lt;br /&gt;&lt;br /&gt;While getting back into the Forms Builder, I frequently want to have multiple PL/SQL Editor windows open editing different program units at the same time.  A couple years ago I found out that if you hold the SHIFT key and double click on a program unit's icon in the Object Navigator pane, Forms Builder opens a new PL/SQL Editor window open while keeping all current PL/SQL Edit windows open!!&lt;br /&gt;&lt;br /&gt;Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-5184645317389214694?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/5184645317389214694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=5184645317389214694&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/5184645317389214694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/5184645317389214694'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/07/multiple-plsql-editors-open-in-oracle.html' title='Multiple PL/SQL Editors Open in Oracle Forms Builder'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-9194515641623441976</id><published>2008-07-11T10:51:00.000-07:00</published><updated>2008-07-11T11:11:13.091-07:00</updated><title type='text'>SP2-0552: Bind variable "..." not declared.</title><content type='html'>I was creating a SQL*Plus script for testing the results of a new report.  The script prompted the me for some values and then ran some queries.  I then was going to compare those query results with the results of the new report.  Pretty basic.  I have done this type of thing many, many times before.&lt;br /&gt;&lt;br /&gt;The script issues the ACCEPT command to prompt and receive my test values.   A SELECT statement runs to query the database.  Here is a sample SQL*Plus script based on our friend the EMP table:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;ACCEPT p_emp_no char PROMPT "Enter employee ID: "&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;select *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  from emp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; WHERE empno = &amp;amp;p_emp_no;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;I would run the script in SQL*Plus (Oracle 9.2.0.4.0) and get:&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;SP2-0552: Bind variable "P_EMP_NO" not declared.&lt;/blockquote&gt;Ok, what the heck is going on?  Well it ends up an hour or so earlier I had ran another SQL*Plus script which set SCAN off (SET SCAN OFF) because the prior script had an ampersand (&amp;amp;) in one of the remarks.  Well with SCAN set OFF, SQL*Plus was somehow converting '= &amp;amp;p_emp_no" into "= :p_emp_no" and looking at p_emp_no as if it were an undefined bind variable.  I discovered this when I finally exited SQL*Plus and reentered and reran the script and it worked.  So I added SET SCAN ON to my script and it now works!!&lt;br /&gt;&lt;br /&gt;Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-9194515641623441976?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/9194515641623441976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=9194515641623441976&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/9194515641623441976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/9194515641623441976'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/07/sp2-0552-bind-variable-not-declared.html' title='SP2-0552: Bind variable &quot;...&quot; not declared.'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-4527535356750489165</id><published>2008-06-17T13:08:00.000-07:00</published><updated>2008-06-17T13:20:16.505-07:00</updated><title type='text'>Modeling in SQL Developer</title><content type='html'>I noticed on &lt;a href="http://blogs.ittoolbox.com/oracle/guide/archives/application-express-adf-and-sql-developer-kaleidoscope-2008-25426"&gt;Lewis Cunningham's blog&lt;/a&gt; that at ODTUG &lt;a href="http://sueharper.blogspot.com/"&gt;Sue Harper&lt;/a&gt; said that SQL Developer will be getting modeling in its next version!!  Sounds like Oracle is listening to users in the &lt;a href="http://forums.oracle.com/forums/thread.jspa?messageID=1643661&amp;amp;#1643661"&gt;OTN Forums&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-4527535356750489165?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/4527535356750489165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=4527535356750489165&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/4527535356750489165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/4527535356750489165'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/06/modeling-in-sql-developer.html' title='Modeling in SQL Developer'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-8594459716455234900</id><published>2008-05-02T07:51:00.001-07:00</published><updated>2008-05-02T07:55:46.550-07:00</updated><title type='text'>Locate New SQL Developer Features/Fixes</title><content type='html'>One thing that I found was an easy way to locate new features and fixes in SQL Developer.  If you go to &lt;a href="http://apex.oracle.com/pls/otn/f?p=42626:37"&gt; SQL Developer Exchange&lt;/a&gt; and sort it by "status" you can see a lot of the features and fixes for a particular version.  Note that this is not a comprehensive list of the new features and fixes, but I have found some really neat new things I did not know that are in release 1.5&lt;br /&gt;&lt;br /&gt;Mike&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-8594459716455234900?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/8594459716455234900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=8594459716455234900&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/8594459716455234900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/8594459716455234900'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/05/locate-new-sql-developer-featuresfixes.html' title='Locate New SQL Developer Features/Fixes'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-6903584247522545459</id><published>2008-04-09T08:56:00.000-07:00</published><updated>2008-05-02T09:29:43.672-07:00</updated><title type='text'>Tom Kyte and Steven Feuerstein Event in Cleveland, Ohio May 22nd and 23rd</title><content type='html'>Just wanted to let everyone know that the Northeast Ohio Oracle users group is having a 2-Day event with &lt;a href="http://www.neooug.org/generaltab/seminar_2008/seminar.html"&gt;Tom Kyte and Steven Feuerstein.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Feel free to pass this information along.&lt;br /&gt;&lt;br /&gt;Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-6903584247522545459?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/6903584247522545459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=6903584247522545459&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6903584247522545459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6903584247522545459'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/04/tom-kyte-and-steven-feuerstein-event-in.html' title='Tom Kyte and Steven Feuerstein Event in Cleveland, Ohio May 22nd and 23rd'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-7960139884787094601</id><published>2008-04-09T08:24:00.000-07:00</published><updated>2008-05-02T13:14:40.947-07:00</updated><title type='text'>I can't get away from Oracle, even on vacation.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/__MsbicWteEs/R_zqM6nftxI/AAAAAAAAACA/Qu-HwtYmgnk/s1600-h/P3261467.JPG"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/__MsbicWteEs/R_zqM6nftxI/AAAAAAAAACA/Qu-HwtYmgnk/s320/P3261467.JPG" alt="" id="BLOGGER_PHOTO_ID_5187278378438211346" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My family and I went to Washington, DC for part of our Easter break in March.  When we went to get on the subway (sorry I mean the "Metro"), low and behold what should I find but advertisements for Oracle on the walls and the ground.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-7960139884787094601?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/7960139884787094601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=7960139884787094601&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/7960139884787094601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/7960139884787094601'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2008/04/i-cant-get-away-from-oracle-even-on.html' title='I can&apos;t get away from Oracle, even on vacation.'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/__MsbicWteEs/R_zqM6nftxI/AAAAAAAAACA/Qu-HwtYmgnk/s72-c/P3261467.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-2728388030464385124</id><published>2007-11-12T07:58:00.000-08:00</published><updated>2007-11-12T09:27:30.456-08:00</updated><title type='text'>OOW Envy Week</title><content type='html'>Well, this is the week that I am envious of all those attendees of Oracle Open World conference.  I read all the blogs of attendees of the conferences and evening activities and wish I were there.  I was unable to attend based on my work schedule and priorities, so reading the blogs is a great way to get some insight into what's new at Oracle.&lt;br /&gt;&lt;br /&gt;This morning reading the OOW blogs caused me to recall that I have been to good number of Oracle-related conferences.  I have not been to any Oracle Open Worlds but have been to one ODTUG conference and 10 IOUG conferences.  I attended IOUG conferences when they were a combined effort between Oracle and the International Oracle User's Group (IOUG).  Around 1995 the conference split into the Oracle Open World conference and the IOUG conference.  I also did a couple presentations at the IOUG conference in 2000 in Anaheim.&lt;br /&gt;&lt;br /&gt;So I dug out me list of Oracle conferences and here it is.  It is not complete.  It may not be completely correct.  I do not have all the ODTUG conferences.  I may add them at some point in time.  I have a star in front of the ones that I attended.&lt;br /&gt;&lt;br /&gt;Oracle Conferences&lt;br /&gt;&lt;br /&gt;1985 IOUW San Diego, CA&lt;br /&gt;1986 IOUW San Francisco, CA&lt;br /&gt;1987 IOUW Washington, DC Oct&lt;br /&gt;1988 IOUW Orlando, FL&lt;br /&gt;*1989 IOUW Dallas, TX&lt;br /&gt;1990 IOUW Anaheim, CA&lt;br /&gt;*1991 IOUW Miami, FL&lt;br /&gt;1992 IOUW San Francisco, CA&lt;br /&gt;*1993 IOUW Orlando, FL Sep 26-Oct 1&lt;br /&gt;1994 IOUW San Francisco, CA&lt;br /&gt;*1995 IOUW Philadelphia, PA * Last conference with Oracle and IOUG combined&lt;br /&gt;1996 IOUW Dallas, TX Sep 15-20 was cancelled&lt;br /&gt;1996 OOW San Franciso, CA Nov 3-8&lt;br /&gt;*1997 IOUG Dallas, TX Apr 27-May 2&lt;br /&gt;1997 OOW Los Angles, CA Nov 14-18&lt;br /&gt;*1998 IOUG Orlando, FL May&lt;br /&gt;1998 OOW San Francisco, CA Nov 8-12&lt;br /&gt;*1999 IOUG Denver, CO Apr 11-16&lt;br /&gt;1999 OOW Los Angles, CA Nov 14-18&lt;br /&gt;*2000 IOUG Anaheim, CA May 6-11 (I presented at this conference.)&lt;br /&gt;2000 OOW San Franciso, CA Oct 2-5&lt;br /&gt;*2001 IOUG Orlando, FL Apr 29-May 3&lt;br /&gt;2001 OOW San Franciso, CA Oct 2-8&lt;br /&gt;2002  IOUG San Diego, CA Apr 14-19&lt;br /&gt;2002 OOW San Franciso, CA&lt;br /&gt;2003 IOUG Orlando, FL Apr 28-May 1&lt;br /&gt;2003 OOW San Franciso, CA Sep 8-11&lt;br /&gt;*2004 IOUG Toronto, ON Apr 19-22&lt;br /&gt;2004 OOW San Franciso, CA Dec 6-9&lt;br /&gt;2005 IOUG Orlando, FL May 1-5&lt;br /&gt;2005 OOW San Franciso, CA Sep 19-22&lt;br /&gt;2006 IOUG Nashville, Tennessee Apr 23-27&lt;br /&gt;2006 OOW San Franciso, CA Oct 21-24&lt;br /&gt;2007 IOUG Las Vegas, NV Apr 16-19&lt;br /&gt;* 2007 ODTUG Daytona, FL Jun 18-20&lt;br /&gt;2007 OOW San Franciso, CA Nov 12-15&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-2728388030464385124?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/2728388030464385124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=2728388030464385124&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/2728388030464385124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/2728388030464385124'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2007/11/oow-envy-week.html' title='OOW Envy Week'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-253226703946055922</id><published>2007-09-18T06:25:00.000-07:00</published><updated>2007-09-18T09:58:19.809-07:00</updated><title type='text'>In ApEx, Upload/Dowload BLOB/CLOB stored in another database</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Scenario:&lt;/span&gt; I have a database named BLOBS_DB which has a table (REPORTS) containing a primary key (PK) column, a BLOB column (BLOB_COL) , and a CLOB column (CLOB_COL).  I  have HTML DB (predecessor to Oracle Application Express) running in another database named APP_DB.  (The names of the databases and objects have been changed to protect the innocent;)   I want to be able to upload and download either LOB columns into the BLOBS_DB database from within an HTML DB application running on the APP_DB database.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem:&lt;/span&gt; For downloading you cannot issue a SELECT of a LOB column over a database link.  You get the "ORA-22992: cannot use LOB locators selected from remote tables" error message.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Trick:&lt;/span&gt; You can get LOBs over a database link using an INSERT statement.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Upload Trick:&lt;/span&gt; The HTML DB form inserts into a global temporary table (UPLOAD_REPORTS) in the APP_DB with an INSTEAD-OF trigger on it which moves a copy of the LOBs to the REPORT_DB database via a INSERT INTO/SELECT FROM statement:&lt;br /&gt;&lt;br /&gt;INSERT INTO reports@BLOBS_DB&lt;br /&gt;(pk, blob_col, clob_col)&lt;br /&gt;VALUES&lt;br /&gt;(:new.pk, :new.blob_col, :new.clob_col);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Download Work Around:&lt;/span&gt; When the user selects a LOB to download, I move a copy of the row in the BLOBS_DB database to the APP_DB database with an INSERT INTO/SELECT FROM statement:&lt;br /&gt;&lt;br /&gt;INSERT INTO download_reports&lt;br /&gt;SELECT * FROM reports@BLOBS_DB;&lt;br /&gt;&lt;br /&gt;Since the UPLOAD_REPORTS and DOWNLOAD_REPORTS tables are a global temporary tables in the APP_DB database when the HTML DB access to the APP_DB database is finished, the global temporary tables are emptied.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-253226703946055922?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/253226703946055922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=253226703946055922&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/253226703946055922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/253226703946055922'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2007/09/in-apex-uploaddowload-blobclob-stored.html' title='In ApEx, Upload/Dowload BLOB/CLOB stored in another database'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-4313619655547091988</id><published>2007-08-27T06:44:00.000-07:00</published><updated>2007-08-27T07:25:56.779-07:00</updated><title type='text'>Preserve Leading Zeros in ApEx CSV Export</title><content type='html'>I located a method of &lt;a href="http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm#CSVAndExcel"&gt;preserving leading zeros&lt;/a&gt; on values when exporting a report region to CSV in HTML DB (ApEx).&lt;br /&gt;&lt;br /&gt;When Excel opens up a CSV file it defaults all cells to "General" formatting and attempts to "help the user" by removing leading zeros on cell values and converting them from strings to numbers.  That can be a problem for values like product codes (SKUs) that begin with a zero.&lt;br /&gt;&lt;br /&gt;The trick is to SELECT the value such that Excel will see it as a string and not a number.  So prefix an equals sign and double quote on to the value and post fix a double quote.  So&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  SELECT your_column&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    FROM your_table&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;becomes&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  SELECT '="'||your_column||'"'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    FROM your_table&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That is great except the users now see the additional characters in the report region.  To get a round this use the following SELECT statement:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  SELECT your_column, '="'||your_column||'"' quoted_column&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    FROM your_table&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and put a "PL/SQL Express" condition (based on Sergio's &lt;a href="http://www.orablogs.com/sergio/archives/001873.html"&gt;blog entry&lt;/a&gt;) on each column.  The conditional display express for YOUR_COLUMN would be:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;INSTR(NVL(:REQUEST,'FOO'),'FLOW_EXCEL') = 0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The conditional display express for QUOTED_COLUMN would be:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;INSTR(NVL(:REQUEST,'FOO'),'FLOW_EXCEL') != 0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To get even more customized CSV output look at Scott's blog &lt;a href="http://spendolini.blogspot.com/2006/04/custom-export-to-csv.html"&gt;entry&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-4313619655547091988?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/4313619655547091988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=4313619655547091988&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/4313619655547091988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/4313619655547091988'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2007/08/preserve-leading-zeros-in-apex-csv.html' title='Preserve Leading Zeros in ApEx CSV Export'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-5164694265762178144</id><published>2007-08-24T10:38:00.000-07:00</published><updated>2007-08-24T10:52:09.015-07:00</updated><title type='text'>SQL Developer's "SQL History"</title><content type='html'>I love the SQL History button (F8) in SQL Developer.    Let me tell you what happened to me yesterday.    I using SQL Developer to work on a difficult SELECT statement when the electricity at work went out on me.   Poof my SELECT statement was gone, right?  Not in SQL Developer.   When everything came up I started SQL Developer, opened a SQL Worksheet, and clicked on the SQL History button .  There was my SELECT statement.&lt;br /&gt;&lt;br /&gt;Thanks Oracle for the  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/__MsbicWteEs/Rs8ZPC-MGjI/AAAAAAAAABU/FPVo8GhuT2g/s1600-h/history.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/__MsbicWteEs/Rs8ZPC-MGjI/AAAAAAAAABU/FPVo8GhuT2g/s320/history.jpg" alt="" id="BLOGGER_PHOTO_ID_5102324649120504370" border="0" /&gt;&lt;/a&gt; button.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-5164694265762178144?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/5164694265762178144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=5164694265762178144&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/5164694265762178144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/5164694265762178144'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2007/08/sql-developers-sql-history.html' title='SQL Developer&apos;s &quot;SQL History&quot;'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/__MsbicWteEs/Rs8ZPC-MGjI/AAAAAAAAABU/FPVo8GhuT2g/s72-c/history.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-7817696033379701032</id><published>2007-08-23T07:15:00.000-07:00</published><updated>2007-08-23T10:03:51.554-07:00</updated><title type='text'>Table Rows to One String in SQL</title><content type='html'>I came across of very cool &lt;a href="http://forums.oracle.com/forums/thread.jspa?messageID=2022060"&gt;feature&lt;/a&gt; yesterday that I had not seen before. It was the ability to take values of a column in multiple rows and concatenate them into one string. This is useful for building a TO distribution list for an email. Here is an example of concatenating all the names of the employees in the EMP table:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SQL&gt; SELECT *&lt;br /&gt;2    FROM emp;&lt;br /&gt;&lt;br /&gt;EMPNO ENAME      JOB             MGR  HIREDATE  SAL        COMM       DEPTNO&lt;br /&gt;----- ---------- --------------- ---- --------- ---------- ---------- ----------&lt;br /&gt;7839 KING        PRESIDENT            17-NOV-81       5000                    10&lt;br /&gt;7698 BLAKE       MANAGER         7839 01-MAY-81       2850                    30&lt;br /&gt;7782 CLARK       MANAGER         7839 09-JUN-81       2450                    10&lt;br /&gt;7566 JONES       MANAGER         7839 02-APR-81       2975                    20&lt;br /&gt;7788 SCOTT       ANALYST         7566 09-DEC-82       3000                    20&lt;br /&gt;7902 FORD        ANALYST         7566 03-DEC-81       3000                    20&lt;br /&gt;7369 SMITH       CLERK           7902 17-DEC-80        800                    20&lt;br /&gt;7499 ALLEN       SALESMAN        7698 20-FEB-81       1600        300         30&lt;br /&gt;7521 WARD        SALESMAN        7698 22-FEB-81       1250        500         30&lt;br /&gt;7654 MARTIN      SALESMAN        7698 28-SEP-81       1250       1400         30&lt;br /&gt;7844 TURNER      SALESMAN        7698 08-SEP-81       1500          0         30&lt;br /&gt;7876 ADAMS       CLERK           7788 12-JAN-83       1100                    20&lt;br /&gt;7900 JAMES       CLERK           7698 03-DEC-81        950                    30&lt;br /&gt;7934 MILLER      CLERK           7782 23-JAN-82       1300                    10&lt;br /&gt;&lt;br /&gt;14 rows selected.&lt;br /&gt;&lt;br /&gt;SQL&gt;&lt;br /&gt;SQL&gt; SELECT LTRIM(SYS_CONNECT_BY_PATH(myvalues, ','),',') catvalues&lt;br /&gt;2    FROM (SELECT myvalues, ROW_NUMBER() OVER (ORDER BY myvalues) rn, COUNT(*) OVER () cnt&lt;br /&gt;3            FROM (SELECT ename myvalues&lt;br /&gt;4                    FROM emp&lt;br /&gt;5                 )&lt;br /&gt;6         ) data&lt;br /&gt;7   WHERE rn = cnt&lt;br /&gt;8   START WITH rn = 1&lt;br /&gt;9   CONNECT BY PRIOR rn = rn-1;&lt;br /&gt;&lt;br /&gt;CATVALUES&lt;br /&gt;-----------------------------------------------------------------------------------&lt;br /&gt;ADAMS,ALLEN,BLAKE,CLARK,FORD,JAMES,JONES,KING,MARTIN,MILLER,SCOTT,SMITH,TURNER,WARD&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here is the SELECT statement:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SELECT LTRIM(SYS_CONNECT_BY_PATH(myvalues, ','),',') catvalues&lt;br /&gt;FROM (SELECT myvalues, ROW_NUMBER() OVER (ORDER BY myvalues) rn, COUNT(*) OVER () cnt&lt;br /&gt;FROM (SELECT ename myvalues&lt;br /&gt;      FROM emp&lt;br /&gt;   )&lt;br /&gt;) data&lt;br /&gt;WHERE rn = cnt&lt;br /&gt;START WITH rn = 1&lt;br /&gt;CONNECT BY PRIOR rn = rn-1;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To figure this out let us look at the inner SELECT:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SQL&gt;&lt;br /&gt;SQL&gt; SELECT myvalues, ROW_NUMBER() OVER (ORDER BY myvalues) rn, COUNT(*) OVER () cnt&lt;br /&gt;2    FROM (SELECT ename myvalues&lt;br /&gt;3            FROM emp&lt;br /&gt;4         );&lt;br /&gt;&lt;br /&gt;MYVALUES           RN        CNT&lt;br /&gt;---------- ---------- ----------&lt;br /&gt;ADAMS               1         14&lt;br /&gt;ALLEN               2         14&lt;br /&gt;BLAKE               3         14&lt;br /&gt;CLARK               4         14&lt;br /&gt;FORD                5         14&lt;br /&gt;JAMES               6         14&lt;br /&gt;JONES               7         14&lt;br /&gt;KING                8         14&lt;br /&gt;MARTIN              9         14&lt;br /&gt;MILLER             10         14&lt;br /&gt;SCOTT              11         14&lt;br /&gt;SMITH              12         14&lt;br /&gt;TURNER             13         14&lt;br /&gt;WARD               14         14&lt;br /&gt;&lt;br /&gt;14 rows selected.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Oracle starts at the top where &lt;pre&gt;rn = 1&lt;/pre&gt; which is ADAMS.  It connects each node of the tree to the prior element where the prior's RN value is one less &lt;pre&gt;rn = rn -1&lt;/pre&gt; until WARD.  Now the SYS_CONNECT_BY_PATH function in a CONNECT BY query takes the tree and concatenates the values together putting a comma ',' between the nodes in the tree.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-7817696033379701032?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/7817696033379701032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=7817696033379701032&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/7817696033379701032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/7817696033379701032'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2007/08/table-rows-to-one-string-in-sql.html' title='Table Rows to One String in SQL'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-6956197841752905139</id><published>2007-08-21T09:17:00.000-07:00</published><updated>2007-08-21T09:30:54.378-07:00</updated><title type='text'>Updated GUI Intensive ApEx Application post</title><content type='html'>I will keep adding issues to my &lt;a href="http://mikerife.blogspot.com/2007/06/gui-intensive-apex-application.html"&gt;GUI intensive ApEx Application&lt;/a&gt; blog as I encounter them.  This will keep them all together in one place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-6956197841752905139?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/6956197841752905139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=6956197841752905139&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6956197841752905139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6956197841752905139'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2007/08/updated-gui-intensive-apex-application.html' title='Updated GUI Intensive ApEx Application post'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-6986449101739497499</id><published>2007-06-17T19:07:00.000-07:00</published><updated>2007-08-21T09:30:00.372-07:00</updated><title type='text'>ODTUG Kalidescope Conference</title><content type='html'>I attended the Advanced APEXposed 2007 training and the ODTUG Kaleidoscope conference.  Both the beginning and advanced Oracle Application Express (ApEx) training were sold out.&lt;br /&gt;On the conference web page there is a &lt;a href="http://www.odtugkaleidoscope.com/SAG.pdf"&gt;listing&lt;/a&gt; of all the conference’s technical sessions.  I copies of these papers on CD if you are interested.&lt;br /&gt;For each training or technical session I attended, I have listed below the abstract of the session along with what we did or special things of note from the session.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ODTUG ApExposed (Advanced Oracle Application Express Training)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Welcome &amp; Keynote&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mike Hichwa, Oracle Corporation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Hands-On Ajax and JavaScript&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Scott Spendolini, Sumner Technologies, LLC&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Web applications are quickly maturing. More client/server-like functionality is appearing on the Web each day, making sites easier to use and navigate. APEX itself included several libraries which make adding these types of features much easier. This session will outline when and when not to use Ajax and JavaScript in your APEX applications. It will provide an overview of the built-in APEX JavaScript libraries. You will build a number of different Ajax and JavaScript components, from instantaneous validations to dynamic select lists, and learn how to deploy them in your own APEX applications.&lt;br /&gt;• Added “is required” validation to an application so the user does not have to submit the whole page to the server just to get a “field … is required” error message.  The user get the error message as they attempt to exit the field.&lt;br /&gt;• Added automatic uppercasing of fields which fires when the user moves out of a field.&lt;br /&gt;• Added hiding and showing of page items based on the value of other items on the page.&lt;br /&gt;• Added hiding and showing of a field and its label.&lt;br /&gt;• Added “check all” option for checkboxes in a multiple row region.&lt;br /&gt;• Added a pop-up window.&lt;br /&gt;• Added a confirm message (OK or Cancel).&lt;br /&gt;• Added an on-demand process so when a value is changed on the page its description is automatically updated without requiring the user to submit the page to the server.&lt;br /&gt;• Added an on-demand process so when a value is changed on the page a select list’s list of values is automatically updated without requiring the user to submit the page to the server.&lt;br /&gt;• Added logic to refresh a report region without having to rerender the whole page.&lt;br /&gt;• NOTE: User ApEx validation processes in connection with Javascript validations because users can turn Javascript off in their browser.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UI and Design&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Scott Spendolini, Sumner Technologies, LLC&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Most developers are not graphic designers, and most graphic designers are not developers. And with good reason! Despite this, the expectations to create a well-designed site often lie squarely on the developer’s shoulders. This session will demonstrate the entire process of replicating an existing user interface in APEX. It will discuss the methodology used when creating the templates, discuss the different tools available, and cover Section 508 concerns.&lt;br /&gt;• To create a new theme start with a copy of the built-in theme #4.&lt;br /&gt;• Use subscriptions when standardizing themes across applications.&lt;br /&gt;• Do not load theme images in the /i/ directory.  Create your own virtual directory off of the /i/ directory.&lt;br /&gt;• Use TABINDEX to control proper ordering of tabbing from item to item in a page.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Security&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Raj Mattamal, Sumner Technologies, LLC&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As important as it is, security is almost always added to an application as a last step, if at all. Designing your APEX application with security in mind is critical and should not be overlooked. This session will discuss how to build secure APEX applications from the ground up so that a hacker cannot exploit them. Time will also be spent on discussing how to segment functionality inside of an APEX application so that only authorized users can perform specific tasks. It will examine what can be done to secure the underlying data of an APEX application. Finally, it will outline a list of things that need to be secured in an installation of APEX, as well as the associated infrastructure components.&lt;br /&gt;• For testing use “Open Door” authentication.  It allows you to login and any user ID.&lt;br /&gt;• Turn on session state protection.&lt;br /&gt;• Check for SQL Injection on regions which refer to search field(s) or regions based on a SELECT statement generated by PL/SQL.&lt;br /&gt;• Check for what I call “Javascript Injection”.  User enters Javascript into a data entry field and submits the page.  When the page is rendered, the Javascript he entered is functional.  To counter this in PL/SQL there is the UTL_URL.ESCAPE function or the Javascript escape and encode functions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;High Fidelity Reporting: Hands-On PL/PDF&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Josh Millinger, Sumner Technologies, LLC&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With APEX 3.0, creating PDF reports will be as simple as just a couple of clicks. However, there are some limitations to the mechanism used in APEX 3.0 which will limit what it can be used for. PL/PDF, a third-party product, is a PL/SQL-based solution that enables you to generate PDF documents from the Oracle Database. PL/PDF, like APEX, is PL/SQL based, does not require any additional hardware, and is extremely flexible. This hands-on session will outline when to use PL/PDF vs. the built-in PDF engine in APEX 3.0. It will also provide a quick overview on how to install PL/PDF, and will then walk you through the creation and deployment of a PL/PDF report integrated with APEX.&lt;br /&gt;• PDF reports are created in PL/SQL procedures.&lt;br /&gt;• There is no visual editor of the report.&lt;br /&gt;• Can start with PDF and overlay information on it for filling in printable forms.&lt;br /&gt;• PL/PDF costs $500 per database&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Managing APEX&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Joel Kallman, Oracle Corporation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You’ve installed APEX at your organization, people have started to build and deploy applications with it, and before you know it, you have another mission-critical component that needs to be managed. In this session, the Oracle APEX team will discuss the architecture of APEX, how it was designed with scalability in mind, and how to use features of the database and APEX itself to assist in managing it. It will also discuss how to manage the APEX e-mail queue, identify and enhance the performance of slow queries, and prevent poorly written ones from degrading the performance of your system.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;APEX APIs&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Raj Mattamal, Sumner Technologies, LLC&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The APIs provided with APEX are quite powerful. They extend the functionality of APEX so that it can be integrated into named PL/SQL procedures and functions, create data-driven dynamic forms, allow for custom authentication functions, and integrate with LDAP, to name a few. This session will examine the most popular features of the APEX APIs and provide working examples to illustrate how to invoke them. It will also discuss the benefits of and when to use data-driven forms in your applications.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2007 ODTUG Kaleidoscope Conference Presentations I Attended&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Database Tasks with Oracle SQL Developer&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sue Harper, Oracle Corporation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Oracle SQL Developer provides the database developer with a convenient way to perform basic database tasks. Connected to an Oracle database, users can browse, create, edit, and delete database objects; create, edit, and debug SQL and PL/SQL code; manipulate and export data; and create reports. This demonstration-rich session briefly positions the tool, and then quickly walks through a series of activities that a user might do in any day-to-day activity; from creating a connection, to creating basic objects and then writing and debugging PL/SQL code. With particular focus on new features in SQL Developer 1.1, this talk will also address more complex aspects, such as extending the tool, and a few plans for the future.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;APEX and Project Management&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Patrick Cimolini, Cayman Islands Government&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Application Express (APEX) is a robust and productive development tool, however, even APEX projects can be late, over budget, and of dubious quality if they are not well managed. Looking at APEX from a project manager's perspective, the following questions are addressed: How long will a project take? What tasks needs to be done? How long will a single task take? When should the tasks be done and in what order? Who performs the tasks? What skills are required? How are source code and versions managed? What quality can be promised and delivered to the customer? Quantitative metrics and a production application will be used to illustrate the points.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Polishing Below the Surface with Ajax&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;David Schleis, Wisconsin State Laboratory of Hygiene&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It has been suggested by the world’s premier Oracle development users group that decisions concerning hardware and operating system are secondary, and now “it’s all about the web.” The technology that allows for the creation of sophisticated Web-based applications that behave like desktop applications is Ajax, or Asynchronous JavaScript and XML. Ajax allows for some very flashy user interface features to be included on a Web page, but it can also be used to perform less glamorous duties. This presentation provides an introduction to Ajax, including a brief overview of its component technologies, as well as examples of under-the-covers functionality that can be designed into new pages or used to enhance existing applications.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Getting XML Data into and out of Oracle with PL/SQL&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ken Atkins, Creative Design Associates&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;XML is very powerful as a method of transporting data between different applications or databases. Because of this, PL/SQL developers are often faced with the task of creating XML documents from data in normalized Oracle tables, or of storing the data in XML documents back into normalized Oracle tables. This session will present various tools and techniques that are available to the PL/SQL developer to read, write, and manipulate XML documents with the express purpose of getting the XML information into and out of standard Oracle tables.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Flex Your APEX: Implementing Oracle E-Business Suite Flexfields in Application Express&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Shane Bentz, InterVarsity Christian Fellowship/USA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With every passing day, the functional boundaries between traditional client-server applications and Web applications decrease. New technologies such as SOAP and Ajax enable Web applications to function and perform like traditional fat-client software. In this session, I will show how to integrate the E-Business Suite flexfield functionality into Application Express. By leveraging the power of Ajax, Application Express can use descriptive flexfields to create rich Web applications—applications that can change shape and purpose on-the-fly, enhancing the user experience by not reloading the page and minimizing future coding by developers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;APEX by Example: Shared Components&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dimitri Gielis, Ordina Belgium&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Oracle Application Express (APEX) is a quickly growing development environment. The initial goal of APEX was to have something 'simple', a wizard-driven development environment to compete with MS Access or to replace Excel files.  People still use the wizard a lot, but if you would really like to use the force of APEX, you can use Shared Components. This session covers all available Shared Components; it tells you what it is for, why to use it, and how to use it in a real environment with the "DG Tournament" application.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Advanced Database Development with Oracle SQL Developer&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sue Harper, Oracle Corporation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SQL Developer provides a convenient way to perform basic database tasks. Here we look at some of the activities you might perform, running complex scripts, normalizing data, and remote debugging. Advanced reporting capabilities include graphical displays and master-detail reports. We demonstrate a few existing extensions to SQL Developer and show you how to build and include your own extensions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Advanced Application Express Programming Techniques&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Michael Hichwa, Oracle Corporation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Learn Michael Hichwa's perspective on how to develop Application Express (APEX) applications from data model to user interface. Get recommendations for source code management, upgrades, and customizations. See how to exploit new Oracle APEX 3.0 features. See techniques to improve and test performance.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Building Interactive Web Reports with Application Express&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Jeff Hohman, Oracle Corporation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This presentation will show the reporting abilities of Applications Express, will demonstrate how to have multiple SQL statements displayed on one page going to different data sources, and will demonstrate the drilling and manner of which variables can be passed around to other reports. It will also show other Applications Express components (ex. Graphs, Forms, etc.) integrated into the same dashboard.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;APEX Lessons from the Trenches&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bill Holtzman, National Air Traffic Controllers Association&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Application Express enables rapid and efficient development of secure and enterprise-level Web applications. Like any platform, there are numerous tricks of the trade that one learns only after getting waist-deep in the coding. The National Air Traffic Controllers Association (NATCA) has been digging successfully in the APEX gold mine for three years and has a wide assortment of coding techniques to share with those undertaking or considering expanding their use of APEX.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Managing Large Application Development Using Oracle Application Express&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;David Peake, Oracle Corporation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This presentation will outline developing large applications using Oracle Application Express (APEX). It will be based on personal experience managing a diverse team of developers and personally developing APEX Applications on a comprehensive system with close to 1000 individual applications. Development on this application started over four years ago and has successfully been implemented as the primary enterprise-wide OLTP system for a large law enforcement agency with thousands of users.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-6986449101739497499?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/6986449101739497499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=6986449101739497499&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6986449101739497499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/6986449101739497499'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2007/06/odtug-kalidescope-conference-day-0.html' title='ODTUG Kalidescope Conference'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-4276782957746335056</id><published>2007-06-12T06:03:00.000-07:00</published><updated>2007-08-21T09:16:00.734-07:00</updated><title type='text'>A GUI intensive ApEx Application</title><content type='html'>This blog will start out as a laundry list of GUI-type issues that I run into while developing a very GUI intensive. My initial impression is that I should be able to address these issues with either normal HTML DB page design or JavaScript. We are running HTML DB version 2.  My background in screen development is Oracle Forms in which one can develop very “client-heavy” GUI applications.&lt;br /&gt;&lt;br /&gt;I will briefly describe the application. I cannot specify exactly what type of data the application is based on, but I can describe the application at a high enough level that the topics can apply to many other sets of data.&lt;br /&gt;&lt;br /&gt;The application is basically a “user reporting criteria gathering” application. The user assembles a study which is a collection of one or more types of reports, specifies the criteria for the reports, and clicks the run button. The user then receives one or more emails with the reports in Excel format as attachments.  The HTML DB application handles the study definitions, report criteria, and run button.  The data gathering is done as a DMBS_JOB in PL/SQL.  It takes data from the large source tables, summarizes it, and saves it to results tables.  An Excel process is alerted.  Excel places the summarized data into a worksheet, attaches the worksheet to an email, and sends the email to the requester.  This is the second application I have done using this same design.  I worked on another &lt;a href="http://www.rumken.com/ioug2000/Paper951.pdf"&gt;application&lt;/a&gt; a couple years ago that was based on Oracle Forms.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Issue 1: A Generic User Prompter&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;As part of the application the user will have the ability to copy a study or a report in a study. So the screen will have to prompt the user for the new name of the study or report. I decided to utilize the &lt;a href="http://www.w3schools.com/js/tryit.asp?filename=tryjs_prompt"&gt;JavaScript prompt method&lt;/a&gt; to prompt the user.  I created a function that you can pass prompt text to display and the name of the page item that should receive the user's response as well as a default value.&lt;br /&gt;&lt;br /&gt;function prompter(p_prompt, p_destination, p_default) {&lt;br /&gt;  var reply = prompt(p_prompt, p_default);&lt;br /&gt;  if (reply != ' ' || reply != null) {&lt;br /&gt;    html_GetElement(p_destination).value = reply;&lt;br /&gt;  }&lt;br /&gt;  else {&lt;br /&gt;    html_GetElement(p_destination).value = null;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Issue 2: Cascading Select Lists in a From Region&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There are two Select Lists in a form (data entry page) region.  The values in the second Select List are dynamically based on the value that the user selects in the first Select List.  The first Select List is the type of report the user wants.  The second Select List is the format in which the report should be rendered.  You could have two rendering formats for the same report.  One format could be a graphical chart.  The other could be just a numerical dump of the detail data.&lt;br /&gt;&lt;br /&gt;I did not want to force a page submit  to populate the second Select List because it would fire the Automatic Row Processing which would attempt to commit to the database.  I tried playing with the request values upon submit of the page, but could not get that to work.  So after playing around with a couple other options I decided to implement an AJAX JavaScript solution provided by &lt;a href="http://htmldb.oracle.com/pls/otn/f?p=11933:37"&gt;Carl Backstrom&lt;/a&gt;.  It is pretty slick.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Issue 3: Cascading Select Lists in a Tabular From Region&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This is a little harder because you have multiple Select Lists in the region.  In the development process I ended coding this region 4 different ways before deciding on one way.  I used both wizard generated tabular form regions and manually created form regions.  In trying to implement an AJAX solution I read a method that &lt;a href="http://forums.oracle.com/forums/thread.jspa?messageID=1209236&amp;#1209236"&gt;Vikas demonstrates&lt;/a&gt; of being able to access particular items in particular rows in a tabular form.  I was able to get AJAX solution to work, but I decided to “silently” submit the page for the user once they made a selection in the first Select List.  The rendering of the page then populated the dependent Select List with the appropriate values.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Issue 4: Show Parent (Study) in a Tree of Reports&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I wanted to display the structure of the study and its reports in one tree structure.  I was easily able to display a tree of parent and child reports, but wanted the root of the tree to be the study name.  So I created a view which UNIONed in the study name as the root of the tree and all the parent reports and their children as children of the root.  The tree item in the page region then listed the study as the root with the reports underneath it like:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tinypic.com"&gt;&lt;img src="http://i15.tinypic.com/4ue0fh2.jpg" border="0" alt="Image and video hosting by TinyPic" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Issue 5: Allow User to Save Partial Studies&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We needed the ability to allow the users to partially save a study.  In other words allow the user to define part of a study and at a later time come back and edit the report.  I used normal wizard generated HTML DB screens.  There was nothing difficult here.  I allowed screens to save the data to the database.  The tricky part was not allowing the user to run partially entered study.  Also we needed a way to communicate to the user what parts of the study need to be fixed or corrected.   I handled this with a Study Validater function and a Report Validater function.&lt;br /&gt;&lt;br /&gt;At the top of the “edit study” page I put a region that displays which reports in the study the user needs to correct or do something to.  This region calls the Study Validator passing in the study ID of the study the user is editing.  The function returns a table of records.  Each record indicates which report in the study the user needs to modify.&lt;br /&gt;We created a table type which allows us to display the rows returned by the function.  So our region SELECT statement was as simple as:&lt;br /&gt;&lt;br /&gt;SELECT ROW_NUMBER() OVER (ORDER BY NULL) task, text description&lt;br /&gt;  FROM TABLE(check_study(:P3_STUDY_ID))&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://www.databasejournal.com/features/oracle/article.php/2222781"&gt; technical details&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The run study button calls the Study Validater.  If the validater returns no rows, then the study is submitted to be run.  If the validator returns rows then a message pops up indicating that the user has report modifications to make.&lt;br /&gt;&lt;br /&gt;Similarly I have a Report Validator.  It provides the details of what the user has to do for a given report before they can submit the study to run.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Issue 6: Checkbox in a Tabular Form&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The tabular form was wizard generated.  I wanted the last item in each row of data to be a checkbox resulting in a “Y” for yes or an “N” for no to be inserted into the column in the database.  I could have done this as a checkbox and coded an extra &lt;a href="http://download-uk.oracle.com/docs/cd/B31036_01/doc/appdev.22/b28550/api.htm#sthref2358"&gt;page process&lt;/a&gt; to assign the column’s value to each row in the database, but I decided to use a Select List based on a Yes/No list of values.  It is not as fancy or flashy as a checkbox, but I was able to leave all the inserts, updates, and deletes to the wizard generated code.&lt;br /&gt;&lt;br /&gt;I will add more as I encounter them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-4276782957746335056?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/4276782957746335056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=4276782957746335056&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/4276782957746335056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/4276782957746335056'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2007/06/gui-intensive-apex-application.html' title='A GUI intensive ApEx Application'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i15.tinypic.com/4ue0fh2_th.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8721777.post-7584494781221635799</id><published>2007-06-09T05:39:00.000-07:00</published><updated>2007-06-09T05:55:29.437-07:00</updated><title type='text'>Blogging Topics</title><content type='html'>I have two Oracle-related topics tbal  I decided to blog about.&lt;br /&gt;1)  I will be attending the ODTUG Kalidescope conference this year in Daytona, FL.  I will also be attending the Advanced ApEx training.&lt;br /&gt;2) I am about to start 5th Oracle Application Express (ApEx) application.  Being the 5th is not significant.  Being very GUI itensive is.  There is going to be more client side functionality then any Apex I have done so far.  Being from an Orale Forms background I tbought it would cool to do a "This is how I would do it in Forms and how I did it in ApEx" blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8721777-7584494781221635799?l=mikerife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikerife.blogspot.com/feeds/7584494781221635799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8721777&amp;postID=7584494781221635799&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/7584494781221635799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8721777/posts/default/7584494781221635799'/><link rel='alternate' type='text/html' href='http://mikerife.blogspot.com/2007/06/blogging-topics.html' title='Blogging Topics'/><author><name>Michael A. Rife</name><uri>http://www.blogger.com/profile/04328877875508402156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://i13.tinypic.com/6hhppx0.jpg'/></author><thr:total>1</thr:total></entry></feed>
