<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Navigo HR News &#187; Oracle</title>
	<atom:link href="http://news.navigo.com.au/hr/oracle/feed/" rel="self" type="application/rss+xml" />
	<link>http://news.navigo.com.au</link>
	<description>Supporting Australasian HR with the latest news on HR technology and processes.</description>
	<lastBuildDate>Tue, 31 Aug 2010 23:31:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Bulking up your PL/SQL</title>
		<link>http://news.navigo.com.au/2010/09/bulking-up-your-plsql/</link>
		<comments>http://news.navigo.com.au/2010/09/bulking-up-your-plsql/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 23:31:36 +0000</pubDate>
		<dc:creator>Matt Barker</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[plsql]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://news.navigo.com.au/?p=944</guid>
		<description><![CDATA[You don’t know what you don’t know. It’s one of those annoyingly obvious statements people will often say when you’ve discovered something new that you had no idea existed. In the vast world of Oracle, this can often be the case. I had this exact same situation recently during a data conversion process. I needed [...]]]></description>
			<content:encoded><![CDATA[<p>You don’t know what you don’t know. It’s one of those annoyingly obvious statements people will often say when you’ve discovered something new that you had no idea existed. In the vast world of Oracle, this can often be the case.</p>
<p>I had this exact same situation recently during a data conversion process. I needed a way to insert all the good records into a table, and identify those that failed.</p>
<p>My initial approach was to place the inserts in a for loop, wrapping the insert statement in its own block. When an exception is raised, it will be recorded and control will pass to the encompassing block allowing the loop to continue:</p>
<pre>For i in 1..pi_employee_data.last loop
  Begin
    Insert into new_employees values pi_employee_data(i);
  Exception
    When others then
      dbms_output.put_line('Insert data '||SQLERRM
                           ||' Employee#'||pi_employee_data(i).employee_id);
  End;

End loop;

commit;</pre>
<p>Now, this is all well and good. But what if you want to stick to “best practice” and use bulk statements. I’d been making use of collections, so using a forall statement seemed a better approach. Problem being, you can’t wrap the insert statement into its own SQL block. This is where SQL%BULK_EXCEPTIONS comes in.</p>
<p>Note the addition of ‘save exceptions’ to the following forall statement. If any exceptions are encountered when inserting into the new_employees table, they will be saved to the SQL%BULK_EXCEPTIONS object. Only when the forall statement is finished will the exception handler be called. We’re then free to extract any data regarding the particular record that caused the exception.</p>
<pre>function insert_data (pi_employee_data in employee_records)
  return varchar2 is

  l_no_errors number;
  dml_errors  exception;

  PRAGMA EXCEPTION_INIT(dml_errors, -24381);

begin

  forall i in 1..pi_employee_data.count save exceptions
      insert into new_employees values pi_employee_data(i);

  commit;

exception
    when dml_errors then
      l_no_errors := SQL%BULK_EXCEPTIONS.count;
      for i in 1 .. l_no_errors loop
        dbms_output.put_line('Bulk insert error: '||
           SQLERRM(-1 * SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||
           ' Employee:'||
           pi_employee_data(SQL%BULK_EXCEPTIONS(i).ERROR_INDEX).employee_id);
      end loop;

    when others then
      dbms_output.put_line('Error:'||SQLERRM||
         ' '||dbms_utility.format_error_backtrace);

end;</pre>
<p>As mentioned in a recent article by <a href="http://www.oracle-base.com/blog/2010/08/09/learn-to-search-the-oracle-docs/">Tim Place</a>, knowing the problem is one thing, knowing where to find the solution is the other. Using the <a href="http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/tuning.htm#i49099">Oracle documentation</a> and having an idea which keywords to use when looking for a solution makes problems such as the above that much easier.</p>
<p>Conincidently, SQL%BULK_EXCEPTIONS also made an appearance in one of Steve Feuerstein&#8217;s talks at the recent InSync conference in Melbourne. As anyone who&#8217;s seen Steve before will know, collections and bulk operations should be two of the staples of any piece of PL/SQL code you write. Now with SQL%BULK_EXCEPTIONS, you&#8217;ll be able to use them much more effectively.</p>
]]></content:encoded>
			<wfw:commentRss>http://news.navigo.com.au/2010/09/bulking-up-your-plsql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating Payroll Variance Reports with Oracle Discoverer</title>
		<link>http://news.navigo.com.au/2010/02/oracle-discoverer-payroll-variance-report/</link>
		<comments>http://news.navigo.com.au/2010/02/oracle-discoverer-payroll-variance-report/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 22:07:59 +0000</pubDate>
		<dc:creator>Ben Lamb</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Discoverer]]></category>
		<category><![CDATA[payroll]]></category>
		<category><![CDATA[Payroll Variance]]></category>
		<category><![CDATA[Variance]]></category>

		<guid isPermaLink="false">http://news.navigo.com.au/?p=723</guid>
		<description><![CDATA[Overview I have had many clients ask me whether they can create Pay Variation reports in Oracle Discoverer, and how much effort is involved. It is possible and it is quite easy once you know how. To create Pay Variance reports in Oracle Discoverer you only need access to Discoverer Administrator, and either Discoverer Desktop [...]]]></description>
			<content:encoded><![CDATA[<h3>Overview</h3>
<p>I have had many clients ask me whether they can create Pay Variation reports in Oracle Discoverer, and how much effort is involved. It is possible and it is quite easy once you know how.</p>
<p>To create Pay Variance reports in Oracle Discoverer you only need access to Discoverer Administrator, and either Discoverer Desktop or Discoverer Plus (this example will use Discoverer Desktop) and a basic knowledge of how the products work.</p>
<p>Pay Variance reports allow users to compare employees pay details over two different pay periods.  Not only will this allow easy reading for users but also allow the creation of calculations, conditional formatting and other Discoverer features that highlight the data users need to see.</p>
<p>The below image is what we will now create;</p>
<p><img class="aligncenter size-medium wp-image-770" src="http://news.navigo.com.au/wp-content/uploads/2010/02/Var11-Complete-with-formatting-2-535x82.jpg" alt="Var11 - Complete with formatting 2" width="535" height="82" /></p>
<h3>Setting up the new Folder</h3>
<p>To create a Pay Variance report in Oracle Discoverer, the first thing we need to do is setup a new folder in Discoverer Administrator.</p>
<p>Most clients wanting to create a Pay Variance report will already have an existing Pay folder in their End User Layer (EUL) so we will start from this point.  The below image shows the current EUL in Discoverer Administrator with the Pay folder expanded.  Our aim is to duplicate the Pay folder and join it to itself.<br />
<img class="aligncenter size-medium wp-image-726" src="http://news.navigo.com.au/wp-content/uploads/2010/01/Var01-Initial-BA-535x362.jpg" alt="Var01 - Initial BA" width="535" height="362" /></p>
<h4>Duplicate the Pay Folder</h4>
<p>It is good practice to create a new business area when creating custom folders, so I have created a business area called &#8220;Human Resources &#8211; Custom&#8221;</p>
<p>Since we want to duplicate the Pay folder, we can simply copy it.  To do this right click on the original Pay folder and click &#8220;Copy&#8221;</p>
<p>Next, right click on the business area that you want to add the duplicate the folder into and choose &#8220;Paste&#8221;</p>
<p>Your new folder should now appear in the business area you chose.  Next, change the name of the folder to something a little more meaningful.  I tend to call these kind of folders, the name of the original folder (In this case &#8220;Pay&#8221;) with the words &#8220;Outer Join&#8221; after it.  This is because the next step is to create an outer join to the folder.</p>
<p><img class="aligncenter size-medium wp-image-734" src="http://news.navigo.com.au/wp-content/uploads/2010/01/Var04-New-Folder-Created-535x366.jpg" alt="Var04 - New Folder Created" width="535" height="366" /></p>
<h4>Joining the Folders</h4>
<p>Now we will join the new folder to the original one.  Do this by clicking on the new folder and clicking;</p>
<p>Insert -&gt; Join</p>
<p>Then choose the field you want to join your folders by, in this case Employee ID and click &#8220;OK&#8221; to go to the join wizard.</p>
<p><img class="aligncenter size-full wp-image-735" src="http://news.navigo.com.au/wp-content/uploads/2010/01/Var05-New-Join-1.jpg" alt="Var05 - New Join 1" width="314" height="367" /></p>
<p><strong>Step 1</strong> &#8211; Choose as many fields as you like to join the two folders together.  The fields to join by are employee identification fields like Employee ID and Job ID.  Don&#8217;t join by fields like Pay Period, as the point of this report to compare different pay periods, not join by them.  Once you choose the fields to join by click &#8220;Next&#8221;.</p>
<p>*Note &#8211; The folder on the left hand side of the screen is known as &#8220;Master&#8221; and the folder on the right hand side of the screen is known as &#8220;Detail&#8221;, this needs to be known for Step 2.</p>
<p><img class="aligncenter size-medium wp-image-736" src="http://news.navigo.com.au/wp-content/uploads/2010/01/Var05-New-Join-2-535x433.jpg" alt="Var05 - New Join 2" width="535" height="433" /></p>
<p><strong>Step 2</strong> &#8211; When creating the join, it can be a good idea to create an outer join.</p>
<p>The difference between an outer join and a regular join is;</p>
<ul>
<li>A regular join means that there must be a record in both tables to join by. If a record exists in one table but not the other, neither record will be displayed in the chart</li>
<li>An outer join means that when linking the folders together, a record must exist in the first folder, but does not need to exist in the second folder.  For example if an employee got paid in one period, but not in the second period, the employee will still exist in the Discoverer report, but the second folder&#8217;s fields will be left blank.</li>
</ul>
<p>We will create an outer join in this example to show records from the &#8220;Pay&#8221; folder even if they don&#8217;t exist in the &#8220;Pay &#8211; Outer Join&#8221; folder.</p>
<p><img class="aligncenter size-medium wp-image-737" src="http://news.navigo.com.au/wp-content/uploads/2010/01/Var05-New-Join-3-535x433.jpg" alt="Var05 - New Join 3" width="535" height="433" /></p>
<p>The join appears under the fields.</p>
<p><img class="aligncenter size-medium wp-image-738" src="http://news.navigo.com.au/wp-content/uploads/2010/01/Var06-Join-Created-535x366.jpg" alt="Var06 - Join Created" width="535" height="366" /></p>
<p>Once the new folder has been created and joined in Discoverer Administrator we can create the Pay Variance report using Discoverer Desktop. </p>
<p>Continue to page 2 to read this step &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://news.navigo.com.au/2010/02/oracle-discoverer-payroll-variance-report/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Oracle Application Server Timezone Changes &#8211; No time like the present</title>
		<link>http://news.navigo.com.au/2009/11/oracle-application-server-timezone-changes/</link>
		<comments>http://news.navigo.com.au/2009/11/oracle-application-server-timezone-changes/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 22:15:42 +0000</pubDate>
		<dc:creator>Matt Barker</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Alesco]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://news.navigo.com.au/?p=450</guid>
		<description><![CDATA[Have you ever had trouble with daylight savings? No, I&#8217;m not talking about sleeping in and being an hour late for work. Have you ever had your system show the wrong time, scheduled jobs in Alesco or Oracle not run when they&#8217;re meant to, or seen conflicting reports of what the current time is in [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever had trouble with daylight savings? No, I&#8217;m not talking about sleeping in and being an hour late for work.</p>
<p>Have you ever had your system show the wrong time, scheduled jobs in Alesco or Oracle not run when they&#8217;re meant to, or seen conflicting reports of what the current time is in different applications on the one system?</p>
<p>Well, I did recently while administering one of our client&#8217;s Alesco environments. The trace outputs for their Alesco reports were showing conflicting runtimes. Surprise, surprise there was an hour difference, and daylight savings was to blame.</p>
<p>Off the top of my head, there were only two places the times could be incorrect:</p>
<ul>
<li>on the database, and</li>
<li>on the application server</li>
</ul>
<p>So, I logged in and checked the database time. All good on that front.<br />
Next, I logged into the application server and checked the system time. That was correct as well. </p>
<p>It seemed that my assumption was incorrect, there was a third place the time could be incorrect, in the Oracle Application Server software. A quick visit to the Oracle Application Server Control Console confirmed this. It turns out the Oracle Application Server software doesn&#8217;t use the underlying system&#8217;s timezone settings.</p>
<p>Metalink, the Oracle forums and Google were the next ports of call. After a lot of digging (the majority of timezone information I came across dealt with Oracle Databases, not Oracle Application Servers), I discovered that the problem was not specifically with Oracle. Both the Oracle Application Server Control Console and the Oracle Reports Server are Java apps, and it was the Java Runtimes they were using that were causing the timezone issue.</p>
<p>Java (along with Unix/Linux) measures time in milliseconds from January 1st 1970. Once this number has been converted into a human readable time, the timezone adjustments are applied. In Unix/Linux, these timezone settings can be found under /usr/share/zoneinfo (or /usr/share/lib/zoneinfo on some systems). However Java won&#8217;t use this system timezone database, it uses it&#8217;s own.</p>
<p>Inside your Oracle home, there are a number of java executables. Executing <i>java -version</i> told me I was on 1.4.2_12. A quick comparison with the <a href="http://java.sun.com/javase/timezones/tzdata_versions.html" rel="nofollow">Java Timezone Data Versions</a> showed this release did not include the Australian 2008 timezone changes. Luckily Sun provides the <a href="http://java.sun.com/javase/tzupdater_README.html#remove" rel="nofollow">Timezone Updater Tool</a> to bring us up to speed.</p>
<p>Once you&#8217;ve downloaded and unzipped the tool, you can update a single JRE/JDK with the following command:</p>
<pre>&gt; java -jar tupdater.jar -U -v</pre>
<p>This assumes the java executable is in the home you want to update (type <i>which java</i> to check)</p>
<p>As I said, there&#8217;s multiple JRE/JDK homes in the Oracle Application Server homes, so why not update them all at the one time:</p>
<pre>&gt; /usr/bin/find DIRPATH -fstype nfs -prune -o -fstype autofs -prune
-o -name java -print -exec {} -jar /ABSOLUTEPATH/tzupdater.jar -u \;</pre>
<p>Then it was just a matter of bouncing the Oracle processes again. </p>
<p>Ta-da, the times are now correct.</p>
<p><i><b>Note</b><br />
I did receive a number of warnings when updating the timezone. It turns out they were Solaris specific and could be ignored, eg:</p>
<p><b>Q.</b><br />
I get the following message after running the TZ Updater Tool v1.1.0 on Solaris, what does it mean?<br />
<b><br />
/jre/bin/java not directly found in contents file, no package resolution performed.<br />
(May not be in PKG form, not an absolute path, or is a symlink.)<br />
</b><br />
<b>A.</b><br />
This message indicates that the JDK/JRE software just updated was not part of a Solaris package. No step was necessary to update the OS with the fact that files under package management have changed, that is, jre/lib/zi directory contents. The update of the timezone data has been successful in this case.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://news.navigo.com.au/2009/11/oracle-application-server-timezone-changes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scheduling Discoverer Reports to Save You Time</title>
		<link>http://news.navigo.com.au/2009/10/scheduling-discoverer-reports/</link>
		<comments>http://news.navigo.com.au/2009/10/scheduling-discoverer-reports/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 04:56:29 +0000</pubDate>
		<dc:creator>Ben Lamb</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Discoverer]]></category>
		<category><![CDATA[manage workbook]]></category>
		<category><![CDATA[Schedule]]></category>
		<category><![CDATA[v_$parameter]]></category>

		<guid isPermaLink="false">http://news.navigo.com.au/?p=210</guid>
		<description><![CDATA[Overview Discoverer reports can take take a long time to run. To run the report manually and then wait for the report to finish can sometimes be a timely and frustrating exercise. An easier way to get the reports you want without the long wait is to schedule them. Discoverer offers functionality to schedule reports [...]]]></description>
			<content:encoded><![CDATA[<h3>Overview</h3>
<p>Discoverer reports can take take a long time to run. To run the report manually and then wait for the report to finish can sometimes be a timely and frustrating exercise.</p>
<p>An easier way to get the reports you want without the long wait is to schedule them.</p>
<p>Discoverer offers functionality to schedule reports and to simply open the result at a later time.  But there are are a few steps to take to do this.</p>
<h3>Getting the Right Permissions</h3>
<p>The user wanting to schedule reports needs to have access to the table v_$parameter.</p>
<p><code><br />
SQL&gt; CONNECT /@ AS SYSDBA;<br />
SQL&gt; grant SELECT on v_$parameter to [Username];<br />
</code></p>
<h3>Scheduling the Report</h3>
<p>To schedule a report you must first save a report to be scheduled, from this point I will assume you have a report you want scheduled</p>
<ul>
<li>Go to File &gt; Manage Workbooks &gt; Scheduling Manager</li>
</ul>
<p><img class="aligncenter size-medium wp-image-353" src="http://news.navigo.com.au/wp-content/uploads/2009/10/Schedule-Manager-535x255.jpg" alt="Schedule-Manager" width="535" height="255" /></p>
<ul>
<li>Click Schedule</li>
<li>Choose Database or My Computer depending on where the report is saved and click Schedule</li>
</ul>
<p><img class="aligncenter size-full wp-image-375" src="http://news.navigo.com.au/wp-content/uploads/2009/10/Schedule-workbook-from-device.jpg" alt="Schedule-workbook-from-device" width="363" height="219" /></p>
<ul>
<li>Choose a workbook to run and click Schedule</li>
</ul>
<p><img class="aligncenter size-full wp-image-357" src="http://news.navigo.com.au/wp-content/uploads/2009/10/Schedule-workbook.jpg" alt="Schedule-workbook" width="363" height="354" /></p>
<ul>
<li>Choose the worksheet(s) to run, the time and date to run and whether to repeat the refresh and click Next</li>
</ul>
<p><img class="aligncenter size-full wp-image-359" src="http://news.navigo.com.au/wp-content/uploads/2009/10/Schedule-workbook-step1.jpg" alt="Schedule-workbook-step1" width="535" height="344" /></p>
<ul>
<li>Give the task a unique name and description and click finish. (If the name is not unique you will be prompted to let discoverer name it for you, generally adds a 1 to the end.)</li>
</ul>
<p><img class="aligncenter size-full wp-image-360" src="http://news.navigo.com.au/wp-content/uploads/2009/10/Schedule-workbook-step2.jpg" alt="Schedule-workbook-step2" width="535" height="344" /></p>
<ul>
<li>The Workbook will be visible on the main Scheduling Manager screen</li>
</ul>
<p><img class="aligncenter size-medium wp-image-361" src="http://news.navigo.com.au/wp-content/uploads/2009/10/Schedule-Manager-with-task-535x255.jpg" alt="Schedule-Manager-with-task" width="535" height="255" /></p>
<h3>Retrieving the Output</h3>
<p>Once the report has been run</p>
<ul>
<li>Go to File &gt; Manage Workbooks &gt; Scheduling Manager</li>
<li>Click the the already run scheduled task</li>
</ul>
<p><img class="aligncenter size-medium wp-image-363" src="http://news.navigo.com.au/wp-content/uploads/2009/10/Schedule-Manager-open-535x255.jpg" alt="Schedule-Manager-open" width="535" height="255" /></p>
<ul>
<li>Click Open</li>
<li> Asked whether to open the results, click Yes and you will see the report</li>
</ul>
<p><img class="aligncenter size-medium wp-image-364" src="http://news.navigo.com.au/wp-content/uploads/2009/10/Schedule-Manager-report-535x361.jpg" alt="Schedule-Manager-report" width="535" height="361" /></p>
<h3>Conclusion</h3>
<p>So now if you need to run a long report, save yourself some time: schedule it to run over night and simply collect it in the morning.</p>
]]></content:encoded>
			<wfw:commentRss>http://news.navigo.com.au/2009/10/scheduling-discoverer-reports/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle DBMS_METADATA Package</title>
		<link>http://news.navigo.com.au/2009/09/oracle-dbms_metadata-package/</link>
		<comments>http://news.navigo.com.au/2009/09/oracle-dbms_metadata-package/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 04:07:35 +0000</pubDate>
		<dc:creator>Matt Barker</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[dbms_metadata]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://news.navigo.com.au/?p=244</guid>
		<description><![CDATA[A recent archiving exercise for a client saw the need to recreate a number of objects in the database. You could search through an find the object definitions in your source code, then cut and paste to recreate the objects in the correct order. But why not make Oracle work for you and use the [...]]]></description>
			<content:encoded><![CDATA[<p>A recent archiving exercise for a client saw the need to recreate a number of objects in the database.</p>
<p>You could search through an find the object definitions in your source code, then cut and paste to recreate the objects in the correct order. But why not make Oracle work for you and use the DBMS_METADATA package generate the object definitions for you dynamically!</p>
<p>The DBMS_METADATA package allows you to extract the DDL required to recreate any object (tables, triggers, indexes etc) in the database that you have access to.</p>
<p>So, should we wish to extract the DDL required to generate the indexes on the EMPLOYEES table in the Oracle XE Database HR schema, we can run the following PL/SQL:</p>
<pre>
set serveroutput on size 100000

declare
  handle number;
  tranform_handle   number;
  object_definition clob;
begin
  -- Define the object type we're exporting
  handle := dbms_metadata.open(upper('INDEX'));

  -- only get the objects for the current table
  dbms_metadata.set_filter(handle, 'BASE_OBJECT_NAME', 'EMPLOYEES');

  -- add the trailing semicolon to the output
  tranform_handle := dbms_metadata.add_transform(handle, 'DDL');
  dbms_metadata.set_transform_param(tranform_handle, 'SQLTERMINATOR', TRUE);

  -- extract all the object of type  for the given table
  loop

    object_definition := dbms_metadata.fetch_clob(handle);

    exit when object_definition is null;

    --convert the clob to a string
    dbms_output.put_line(dbms_lob.substr(object_definition, 32000, 1));

  end loop;

end;
</pre>
<p>Obviously in a real life example you wouldn&#8217;t sent the output to the screen, but this simple example shows another of the useful built in packages provided by Oracle.</p>
<p>For more information on the DBMS_METADATA package, see the <a href="http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_metada.htm" target="_blank">Oracle online reference guide</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://news.navigo.com.au/2009/09/oracle-dbms_metadata-package/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Discoverer returning inconsistent data</title>
		<link>http://news.navigo.com.au/2009/08/discoverer-returning-inconsistent-data/</link>
		<comments>http://news.navigo.com.au/2009/08/discoverer-returning-inconsistent-data/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 02:59:40 +0000</pubDate>
		<dc:creator>Peter Forbes</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Discoverer]]></category>
		<category><![CDATA[reporting]]></category>

		<guid isPermaLink="false">http://news.navigo.com.au/?p=180</guid>
		<description><![CDATA[A customer recently emailed us saying that one of the Discoverer reports we had written was returning inconsistent data each time they ran the report.  This lead them to use the report less and was also picked up by their auditors when they were checking employee salaries. On investigation, we found the report was showing [...]]]></description>
			<content:encoded><![CDATA[<p>A customer recently emailed us saying that one of the Discoverer reports we had written was returning inconsistent data each time they ran the report.  This lead them to use the report less and was also picked up by their auditors when they were checking employee salaries.</p>
<p>On investigation, we found the report was showing inconsistent data due to the Discoverer Query Governor Option &#8220;Limit retrieved query data to&#8221; set to 10,000 rows.</p>
<p><img class="alignnone size-full wp-image-181" title="Discoverer Option Panel" src="http://news.navigo.com.au/wp-content/uploads/2009/08/image002.png" alt="Discoverer Option Panel" width="535" height="393" /></p>
<p>When the report was run, a warning appeared stating that &#8220;Not all rows have been retrieved. Data may be inaccurate&#8221;.</p>
<p>We asked the user to un-check this option for the workbook, and the problem was solved.  The report now returns the correct values consistently.</p>
<p>This story is a good example of how easy it is for the business to lose faith in reports due to a relatively minor issue &#8211; in this case a simple option setting in Discoverer.</p>
<p>Remember, if in doubt with any technical solution, just ask. It could be that a very simple tweak like this will have you up and running again.</p>
]]></content:encoded>
			<wfw:commentRss>http://news.navigo.com.au/2009/08/discoverer-returning-inconsistent-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing the Oracle ODBC Driver</title>
		<link>http://news.navigo.com.au/2009/07/installing-the-oracle-odbc-driver/</link>
		<comments>http://news.navigo.com.au/2009/07/installing-the-oracle-odbc-driver/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 07:25:48 +0000</pubDate>
		<dc:creator>Ben Lamb</dc:creator>
				<category><![CDATA[HRIS]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://news.navigo.com.au/?p=920</guid>
		<description><![CDATA[The Oracle Instant Client is a simple way to setup ODBC connections to Oracle databases. This is great for PC support people as in the past installing ODBC for Oracle has not been a simple task. Instant Client also comes with a command line SQL*Plus utility. Instant Client was released in Oracle 10g but can [...]]]></description>
			<content:encoded><![CDATA[<p>The Oracle  Instant Client  is a simple way to setup ODBC connections to Oracle databases.           This is great for PC support people as in the past installing ODBC for Oracle has not been a simple task.</p>
<p>Instant Client also comes with a command line SQL*Plus utility.</p>
<p>Instant Client was released in Oracle 10g but can be used to  connect to older Oracle databases to 8.1.7. Instant Client is a free,  production ready Oracle tool.</p>
<h3>Download Instant Client</h3>
<p>Instant Client can be downloaded free from           <a title="Oracle website: Instant Client Home Page" href="http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html">Oracle&#8217;s OTN website</a>, you&#8217;ll need the:</p>
<ul>
<li> Instant Client Package &#8211; Basic (32mb)</li>
<li> Instant Client Package &#8211; ODBC (700k)</li>
<li> Instant Client Package &#8211; SQL*Plus (260k) (if you want to use SQL*Plus)</li>
</ul>
<p>These files come in a winzip format.</p>
<h3>Installing Instant Client</h3>
<p>Extract the zip file to a directory where you want the Instant Client program to live (say C:\Program Files\Instant Client).</p>
<p>Run the file odbc_install.bat &#8211; this updates some registry settings for the ODBC install</p>
<p>Update your PATH environment variable to include the Instant Client directory.</p>
<p>To do this, go to Control Panel, System and click on the Advanced tab.</p>
<p><img class="aligncenter size-full wp-image-921" title="di_system_properties" src="http://news.navigo.com.au/wp-content/uploads/2010/07/di_system_properties.jpg" alt="" width="350" height="406" /></p>
<p>Click on the Environment variables button and edit the &#8216;Path&#8217;  variable to add the Instant Client directory path (C:\Program  Files\Instant Client).           Make sure you don&#8217;t mess up your other settings in the Path.</p>
<p><img class="aligncenter size-full wp-image-922" title="di_environment_variables" src="http://news.navigo.com.au/wp-content/uploads/2010/07/di_environment_variables.jpg" alt="" width="350" height="392" /></p>
<p>The Oracle ODBC drivers have now been installed!  Easy.</p>
<h3>Set up a tnsnames.ora (optional)</h3>
<p>The tnsnames.ora file is a config file used by Oracle software that  specifies the connection details of the databases you want to connect  to.</p>
<p>If you don&#8217;t use a tnsnames.ora file, you&#8217;ll need to           specify the connection details (server name, port number,  database name) every time you connect to the database instead of just  specifying the alias name.</p>
<p>To create a tnsnames.ora file create a text file and add:</p>
<pre>alien =
  (DESCRIPTION =
    (ADDRESS_LIST =
        (ADDRESS =
          (COMMUNITY = tcp.world)
          (PROTOCOL = TCP)
          (Host = 192.168.0.100)
          (Port = 1521)
        )
    )
    (CONNECT_DATA = (SID = alien)
    )
  )
</pre>
<p>Place this file in the Instant Client directory.</p>
<p>Now add a new environment variable TNS_ADMIN (like the Path  variable) to tell Instant Client where to look for the file.           <strong></strong></p>
<p><strong>Note:</strong> If you already have other Oracle software installed on your PC, chances are you have a tnsnames.ora.           To use that file add a new environment variable TNS_ADMIN and point this to the location of your existing tnsnames.ora</p>
<h3>Configure the ODBC connection</h3>
<p>Set up the ODBC connection by going to Control Panel, Administrative Tools, Data Sources (ODBC).           Click on the System DSN tab and click Add.</p>
<p><strong>Note: </strong>If you only want your Windows login user to see the data source, use the User DSN tab.</p>
<p><img class="aligncenter size-full wp-image-923" title="di_odbc_data_source_admin" src="http://news.navigo.com.au/wp-content/uploads/2010/07/di_odbc_data_source_admin.jpg" alt="" width="350" height="292" /></p>
<p>If prompted for a driver to use, select the &#8216;Oracle in instantclient&#8217;.</p>
<p>Enter a name and description for the data source, if you are using a tnsnames.ora file the database alias should           be available in the TNS Service Name drop down list.  Otherwise leave this field blank.</p>
<p>Leave the other settings to default unless required, although if you&#8217;re only viewing data it           may be wise to check the &#8220;Read-Only Connection&#8221; checkbox.</p>
<p><img class="aligncenter size-full wp-image-924" title="di_odbc_driver_conf" src="http://news.navigo.com.au/wp-content/uploads/2010/07/di_odbc_driver_conf.jpg" alt="" width="350" height="229" /></p>
<h3>Test the Connection</h3>
<p>On the ODBC Driver Configuration page (shown above), click the &#8216;Test Connection&#8217; button.           This will bring up the connection screen.</p>
<p><img class="aligncenter size-full wp-image-925" title="di_connect" src="http://news.navigo.com.au/wp-content/uploads/2010/07/di_connect.gif" alt="" width="270" height="207" /></p>
<p>If your TNSNAMES.ora has been set up simply enter your details:</p>
<p style="padding-left: 30px;">Service name: database alias name<br />
Enter user-name: username<br />
Enter password: password</p>
<p>If you haven&#8217;t set up your TNSNAMES.ora the service name will be in the format:           servername:port/sid</p>
<p>Where server name is the ip or name of the server running the Oracle database, port is the port number the Oracle           listener is running on and sid is the sid name of the database.</p>
<p>For example 192.168.0.50:1521/mydb</p>
<p>If all is good you should get the &#8216;Test Sucessful&#8217; message returned to you.</p>
<h3>Trouble Shooting</h3>
<p>System error code 998 &#8211; malformed or spaces in the PATH env variable</p>
<p><img class="aligncenter size-full wp-image-926" title="di_998" src="http://news.navigo.com.au/wp-content/uploads/2010/07/di_998.gif" alt="" width="500" height="97" /></p>
<p>For more configuration help see the <a href="http://forums.oracle.com/forums/forum.jsp?forum=190">Instant Client Forums</a>.</p>
<h3>Connecting to SQL*Plus</h3>
<p>To run SQL*Plus, go to the directory where Instant Client  Package &#8211; SQL*Plus was unzipped and run the application sqlplus.exe.  This will bring up the following screen where you will connect to the  database.</p>
<p><img class="aligncenter size-full wp-image-928" title="di_sqlplus" src="http://news.navigo.com.au/wp-content/uploads/2010/07/di_sqlplus.jpg" alt="" width="350" height="177" /></p>
]]></content:encoded>
			<wfw:commentRss>http://news.navigo.com.au/2009/07/installing-the-oracle-odbc-driver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
