<?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>all-IT &#187; Oracle</title>
	<atom:link href="http://www.k-oo.de/blog/category/oracle/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.k-oo.de/blog</link>
	<description>all-IT ist ein Blog aus dem IT Alltag</description>
	<lastBuildDate>Fri, 03 Feb 2012 09:42:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Monatsende mit Oracle SQL ermitteln</title>
		<link>http://www.k-oo.de/blog/2009/09/29/monatsende-mit-oracle-sql-ermitteln/</link>
		<comments>http://www.k-oo.de/blog/2009/09/29/monatsende-mit-oracle-sql-ermitteln/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 15:31:41 +0000</pubDate>
		<dc:creator>gklinkmann</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.k-oo.de/blog/?p=1099</guid>
		<description><![CDATA[Hat man sich beim Programmieren auf ein Backend (sprich Datenbank) festgelegt, so kann man beim Programmieren bereits dort einige Aufgaben erledigen lassen. Ein gutes Beispiel ist dafür die Datumsberechnung. Was in Java ein &#8220;Krampf&#8221; ist, lässt sich bei Oracle sehr einfach in der Datenbankanfrage (mittels SQL) erledigen. Möchte man zum Beispiel die Zeitdifferenz von heute [...]]]></description>
			<content:encoded><![CDATA[<p>Hat man sich beim Programmieren auf ein Backend (sprich Datenbank) festgelegt, so kann man beim Programmieren bereits dort einige Aufgaben erledigen lassen.</p>
<p>Ein gutes Beispiel ist dafür die Datumsberechnung. Was in Java ein &#8220;Krampf&#8221; ist, lässt sich bei <strong>Oracle</strong> sehr einfach in der Datenbankanfrage (mittels SQL) erledigen.</p>
<p>Möchte man zum Beispiel die <strong>Zeitdifferenz</strong> von heute bis zum <strong>Monatsende</strong> ermitteln, wäre folgender Lösungsansatz möglich:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> SYSDATE <span style="color: #ff0000;">&quot;heute&quot;</span><span style="color: #66cc66;">,</span>
   LAST_DAY<span style="color: #66cc66;">&#40;</span>SYSDATE<span style="color: #66cc66;">&#41;</span> <span style="color: #ff0000;">&quot;Monatsende&quot;</span><span style="color: #66cc66;">,</span>
   LAST_DAY<span style="color: #66cc66;">&#40;</span>SYSDATE<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">-</span> SYSDATE <span style="color: #ff0000;">&quot;Tage bis zum Monatsende&quot;</span>
   <span style="color: #993333; font-weight: bold;">FROM</span> DUAL;
&nbsp;
heute    Monatsen Tage bis zum Monatsende
<span style="color: #808080; font-style: italic;">-------- -------- -----------------------</span>
29<span style="color: #66cc66;">.</span>09<span style="color: #66cc66;">.</span>09 30<span style="color: #66cc66;">.</span>09<span style="color: #66cc66;">.</span>09                       <span style="color: #cc66cc;">1</span></pre></div></div>

<p>Einziger Nachteil, die SQL Funktion <strong>last_day</strong> steht nicht in jedem Datenbanksystem zur Verfügung.</p>
 <p><a href="http://www.k-oo.de/blog/?flattrss_redirect&amp;id=1099&amp;md5=0821d0608cd1b8de03325d1186cf5539" title="Flattr" target="_blank"><img src="http://www.k-oo.de/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.k-oo.de/blog/2009/09/29/monatsende-mit-oracle-sql-ermitteln/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.k-oo.de/blog/?flattrss_redirect&amp;id=1099&amp;md5=0821d0608cd1b8de03325d1186cf5539" type="text/html" />
	</item>
		<item>
		<title>ORA-22992 und Oracles Restriktionen für Lobs</title>
		<link>http://www.k-oo.de/blog/2009/09/16/ora-22992-und-oracles-restriktionen-fur-lobs/</link>
		<comments>http://www.k-oo.de/blog/2009/09/16/ora-22992-und-oracles-restriktionen-fur-lobs/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 11:39:02 +0000</pubDate>
		<dc:creator>gklinkmann</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.k-oo.de/blog/?p=1021</guid>
		<description><![CDATA[Eine der besten Eigenschaften der Oracle Datenbank ist die Möglichkeit zwei von einander entfernte Datenbanken über einen DB Link zu koppeln. So sind Abfragen auf entfernten Tabelle kein Problem: SELECT * FROM tabellenname@dblinkname; Was ich bis heute nicht wusste ist, dass dies nur funktioniert solange in der Tabelle keine Lobs (Spalten vom Typ clob oder [...]]]></description>
			<content:encoded><![CDATA[<p>Eine der besten Eigenschaften der Oracle Datenbank ist die Möglichkeit zwei von einander entfernte Datenbanken über einen <strong>DB Link</strong> zu koppeln.<br />
So sind Abfragen auf entfernten Tabelle kein Problem:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> tabellenname@dblinkname;</pre></div></div>

<p>Was ich bis heute nicht wusste ist, dass dies nur funktioniert solange in der Tabelle keine Lobs (Spalten vom Typ clob oder blob) enthalten sind. Wenn man es trotzdem tut, bekommt man einen <strong>ORA-22992 cannot use LOB locators selected from remote tables</strong>.</p>
<p>Laut <a href="http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96591/adl04mng.htm#98328"><strong>Oracle</strong></a> sind mit entfernten Lobs nämlich nur folgende Statements <strong>erlaubt</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> t <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> table1@remote_site;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> t <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> table1@remote_site;
<span style="color: #993333; font-weight: bold;">UPDATE</span> t <span style="color: #993333; font-weight: bold;">SET</span> lobcol <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> lobcol <span style="color: #993333; font-weight: bold;">FROM</span> table1@remote_site<span style="color: #66cc66;">&#41;</span>;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> table1@remote_site <span style="color: #66cc66;">...</span>
<span style="color: #993333; font-weight: bold;">UPDATE</span> table1@remote_site <span style="color: #66cc66;">...</span>
<span style="color: #993333; font-weight: bold;">DELETE</span> <span style="color: #993333; font-weight: bold;">FROM</span> table1@remote_site <span style="color: #66cc66;">...</span></pre></div></div>

<p><strong>Verboten</strong> sind dagegen:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> lobcol <span style="color: #993333; font-weight: bold;">FROM</span> table1@remote_site;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> lobtable <span style="color: #993333; font-weight: bold;">SELECT</span> type1<span style="color: #66cc66;">.</span>lobattr <span style="color: #993333; font-weight: bold;">FROM</span> 
    table1@remote_site;
<span style="color: #993333; font-weight: bold;">SELECT</span> DBMS_LOB<span style="color: #66cc66;">.</span>getlength<span style="color: #66cc66;">&#40;</span>lobcol<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> table1@remote_site;</pre></div></div>

<p><strong>Was kann man tun?</strong></p>
<p>Bei <strong>Binary Lobs</strong> (z.B. Bildern) hat man aus meiner Sicht keine andere Möglichkeit als sie sich mit den o.a. Statements (create as, update) in die lokale Datenbank zu kopieren.<br />
Für den lesenden Zugriff auf <strong>Character Lobs</strong> (z.B. lange Texte) kann es ausreichen, die Daten auf der entfernten Datenbank mittels einer Funktion in den Datentyp varchar2 umzuwandeln und über eine View, die diese Funktion benutzt nach außen zu kapseln. Das könnte so aussehen:</p>
<p><strong>entfernte Datenbank</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">OR</span> <span style="color: #993333; font-weight: bold;">REPLACE</span> <span style="color: #993333; font-weight: bold;">VIEW</span> viw_clob_tabelle
<span style="color: #993333; font-weight: bold;">AS</span>
<span style="color: #993333; font-weight: bold;">SELECT</span> spalte1
<span style="color: #66cc66;">,</span> dbms_lob<span style="color: #66cc66;">.</span>substr<span style="color: #66cc66;">&#40;</span>clobSpalte<span style="color: #66cc66;">,</span><span style="color: #cc66cc;">4000</span><span style="color: #66cc66;">,</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> clobText
<span style="color: #993333; font-weight: bold;">FROM</span> clobTabelle;</pre></div></div>

<p><strong>lokale Datenbank:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> spalte1 <span style="color: #66cc66;">,</span> clobText <span style="color: #993333; font-weight: bold;">FROM</span> viw_clob_tabelle@dblinkname;</pre></div></div>

<p><strong>Allerdings</strong> werden dabei nur die ersten 4000 Zeichen des CLOB&#8217;s gelesen, da dass die Längenbeschränkung vom Datentyp varchar2 ist, der von <code>dbms_lob.substr</code> zurückgegeben wird. Aber oft reicht dies aus.</p>
 <p><a href="http://www.k-oo.de/blog/?flattrss_redirect&amp;id=1021&amp;md5=eacdcdc0660c106aae81cfb1e0c8eca1" title="Flattr" target="_blank"><img src="http://www.k-oo.de/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.k-oo.de/blog/2009/09/16/ora-22992-und-oracles-restriktionen-fur-lobs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.k-oo.de/blog/?flattrss_redirect&amp;id=1021&amp;md5=eacdcdc0660c106aae81cfb1e0c8eca1" type="text/html" />
	</item>
		<item>
		<title>Konvertierung Unix Timestamp zu Oracle Date</title>
		<link>http://www.k-oo.de/blog/2007/05/07/konvertierung-unix-timestamp-zu-oracle-date/</link>
		<comments>http://www.k-oo.de/blog/2007/05/07/konvertierung-unix-timestamp-zu-oracle-date/#comments</comments>
		<pubDate>Mon, 07 May 2007 15:43:55 +0000</pubDate>
		<dc:creator>gklinkmann</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.k-oo.de/blog/2007/05/07/konvertierung-unix-timestamp-zu-oracle-date/</guid>
		<description><![CDATA[Der Unix Timestamp (der in vielen Applikationen benutzt wird) und Oracles Datums Format sind leider sehr unterschiedlich. Während Unix die Sekunden ab dem 01.01.1970 zählt, beginnt bei Oracle die Zeitrechnung schon 4000 vor Christi Geburt. Ca. 2 mal im Jahr brauche ich diese Umrechnung und jedes Mal frage ich mich, wie war das noch. Heute [...]]]></description>
			<content:encoded><![CDATA[<p>Der Unix Timestamp (der in vielen Applikationen benutzt wird) und Oracles Datums Format sind leider sehr unterschiedlich. Während Unix die Sekunden ab dem 01.01.1970 zählt, beginnt bei Oracle die Zeitrechnung schon 4000 vor Christi Geburt. Ca. 2 mal im Jahr brauche ich diese Umrechnung und jedes Mal frage ich mich, wie war das noch. Heute ist es mir einen Blogeintrag wert.<br />
Es gibt verschieden Ansätze um vom Unix Timestamp zum Oracle Date Format zu gelangen. Hier sind 2 zur Auswahl:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> to_char<span style="color: #66cc66;">&#40;</span>TO_DATE<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'19700101000000'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'YYYYMMDDHH24MISS'</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">+</span> NUMTODSINTERVAL<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1094165422</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'SECOND'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'dd.mm.yyyy hh24:mi'</span><span style="color: #66cc66;">&#41;</span> datum
<span style="color: #993333; font-weight: bold;">FROM</span> dual;
&nbsp;
02<span style="color: #66cc66;">.</span>09<span style="color: #66cc66;">.</span>2004 <span style="color: #cc66cc;">22</span>:<span style="color: #cc66cc;">50</span></pre></div></div>

<p>Eine fertige Funktion mit Fehlerbehandlung gibt es <a href="http://www.lifeaftercoffee.com/2005/10/20/unix-timestamp-to-oracle-date-conversion/">hier</a>.</p>
<p>Fragt man Tom auf <a href="http://asktom.oracle.com/tkyte/Misc/CTime.html">asktom.oracle.com</a>, so findet man dort auch für verschiedene Zeitzonen eine Lösung:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">-- normal</span>
<span style="color: #993333; font-weight: bold;">SELECT</span> to_char<span style="color: #66cc66;">&#40;</span>to_date<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'01011970'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'ddmmyyyy'</span><span style="color: #66cc66;">&#41;</span> 
   <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">24</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">60</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">60</span> <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">1094165422</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'dd.mm.yyyy hh24:mi'</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> dual
&nbsp;
02<span style="color: #66cc66;">.</span>09<span style="color: #66cc66;">.</span>2004 <span style="color: #cc66cc;">22</span>:<span style="color: #cc66cc;">50</span>
&nbsp;
<span style="color: #808080; font-style: italic;">-- mit abweichender Zeitzone</span>
<span style="color: #993333; font-weight: bold;">SELECT</span> to_char<span style="color: #66cc66;">&#40;</span>new_time<span style="color: #66cc66;">&#40;</span> to_date<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'01011970'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'ddmmyyyy'</span><span style="color: #66cc66;">&#41;</span> 
   <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">24</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">60</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">60</span> <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">1094165422</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'GMT'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'EDT'</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'dd.mm.yyyy hh24:mi'</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> dual
&nbsp;
02<span style="color: #66cc66;">.</span>09<span style="color: #66cc66;">.</span>2004 <span style="color: #cc66cc;">18</span>:<span style="color: #cc66cc;">50</span></pre></div></div>

 <p><a href="http://www.k-oo.de/blog/?flattrss_redirect&amp;id=69&amp;md5=2d649e7db98190d5b50236ceaf84e2d9" title="Flattr" target="_blank"><img src="http://www.k-oo.de/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.k-oo.de/blog/2007/05/07/konvertierung-unix-timestamp-zu-oracle-date/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="http://www.k-oo.de/blog/?flattrss_redirect&amp;id=69&amp;md5=2d649e7db98190d5b50236ceaf84e2d9" type="text/html" />
	</item>
		<item>
		<title>log4plsql &#8211; plsql logging ala log4j</title>
		<link>http://www.k-oo.de/blog/2007/04/16/log4plsql-plsql-logging-ala-log4j/</link>
		<comments>http://www.k-oo.de/blog/2007/04/16/log4plsql-plsql-logging-ala-log4j/#comments</comments>
		<pubDate>Mon, 16 Apr 2007 12:02:47 +0000</pubDate>
		<dc:creator>gklinkmann</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.k-oo.de/blog/2007/04/16/log4plsql-plsql-logging-ala-log4j/</guid>
		<description><![CDATA[log4j ist im Java Umfeld zum &#8220;Quasi &#8211; Standard&#8221; für das Loggen von Applikationen geworden. Grundsätzlich ist mit Java alles möglich. Wenn man allerdings mit einer Oracle Datenbank arbeitet, ist es manchmal performanter bestimmte Funktionalitäten in PL/SQL (Oracles Datenbank Programmiersprache) zu implementieren. Dank log4plsql muss man dabei nicht auf den gewohnten Komfort bei der Ausgabe [...]]]></description>
			<content:encoded><![CDATA[<p>log4j ist im Java Umfeld zum &#8220;Quasi  &#8211; Standard&#8221; für das Loggen von Applikationen geworden. Grundsätzlich ist mit Java alles möglich. Wenn man allerdings mit einer Oracle Datenbank arbeitet, ist es manchmal performanter bestimmte Funktionalitäten in PL/SQL (Oracles Datenbank Programmiersprache) zu implementieren.<br />
Dank <strong>log4plsql</strong> muss man dabei nicht auf den gewohnten Komfort bei der Ausgabe von Log Meldungen verzichten.<br />
<span id="more-64"></span><br />
Die Installation über das Installationsscript ist denkbar einfach. Danach stehen einem die gewohnten Methoden von log4j als Prozeduren und Funktionen des PLOG Packages zur Verfügung. Und der Clou ist, dass sich mit ein bißchen mehr Konfigurationsaufwand auch ein vollständiges log4j anbinden und nutzen lässt.</p>
<p>Das Open Source Logging Framework <strong>log4plsql</strong> (Apache Software License) kann bei <a href="http://sourceforge.net/projects/log4plsql/">sourceforge</a> heruntergeladen werden. Die momentane Version 1.1.3.2 unterstützt alle gängigen Oracle Datenbank Versionen (einschließlich Oracle 10).</p>
 <p><a href="http://www.k-oo.de/blog/?flattrss_redirect&amp;id=64&amp;md5=71bae315e60296d08a329c941a284f79" title="Flattr" target="_blank"><img src="http://www.k-oo.de/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.k-oo.de/blog/2007/04/16/log4plsql-plsql-logging-ala-log4j/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.k-oo.de/blog/?flattrss_redirect&amp;id=64&amp;md5=71bae315e60296d08a329c941a284f79" type="text/html" />
	</item>
	</channel>
</rss>

