<?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>Thu, 29 Jul 2010 11:56:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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 [...]]]></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>

	Tags: <a href="http://www.k-oo.de/blog/tag/oracle/" title="Oracle" rel="tag">Oracle</a><br />

	<p></p><strong>Ähnliche Artikel:</strong>
	<ul class="st-related-posts">
	<li><a href="http://www.k-oo.de/blog/2009/09/16/ora-22992-und-oracles-restriktionen-fur-lobs/" title="ORA-22992 und Oracles Restriktionen für Lobs (September 16, 2009)">ORA-22992 und Oracles Restriktionen für Lobs</a> (0)</li>
	<li><a href="http://www.k-oo.de/blog/2007/05/07/konvertierung-unix-timestamp-zu-oracle-date/" title="Konvertierung Unix Timestamp zu Oracle Date (May 7, 2007)">Konvertierung Unix Timestamp zu Oracle Date</a> (2)</li>
	<li><a href="http://www.k-oo.de/blog/2007/04/16/log4plsql-plsql-logging-ala-log4j/" title="log4plsql &#8211; plsql logging ala log4j (April 16, 2007)">log4plsql &#8211; plsql logging ala log4j</a> (0)</li>
</ul>

]]></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>
		</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  [...]]]></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>

	Tags: <a href="http://www.k-oo.de/blog/tag/oracle/" title="Oracle" rel="tag">Oracle</a><br />

	<p></p><strong>Ähnliche Artikel:</strong>
	<ul class="st-related-posts">
	<li><a href="http://www.k-oo.de/blog/2009/09/29/monatsende-mit-oracle-sql-ermitteln/" title="Monatsende mit Oracle SQL ermitteln (September 29, 2009)">Monatsende mit Oracle SQL ermitteln</a> (0)</li>
	<li><a href="http://www.k-oo.de/blog/2007/05/07/konvertierung-unix-timestamp-zu-oracle-date/" title="Konvertierung Unix Timestamp zu Oracle Date (May 7, 2007)">Konvertierung Unix Timestamp zu Oracle Date</a> (2)</li>
	<li><a href="http://www.k-oo.de/blog/2007/04/16/log4plsql-plsql-logging-ala-log4j/" title="log4plsql &#8211; plsql logging ala log4j (April 16, 2007)">log4plsql &#8211; plsql logging ala log4j</a> (0)</li>
</ul>

]]></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>
		</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 [...]]]></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>


	Tags: <a href="http://www.k-oo.de/blog/tag/linux/" title="Linux" rel="tag">Linux</a>, <a href="http://www.k-oo.de/blog/tag/oracle/" title="Oracle" rel="tag">Oracle</a><br />

	<p></p><strong>Ähnliche Artikel:</strong>
	<ul class="st-related-posts">
	<li><a href="http://www.k-oo.de/blog/2010/06/22/windows-dateianzahl-ermitteln-in-verzeichnissen-mit-vielen-dateien/" title="[Windows] Dateianzahl ermitteln in Verzeichnissen mit vielen Dateien (June 22, 2010)">[Windows] Dateianzahl ermitteln in Verzeichnissen mit vielen Dateien</a> (0)</li>
	<li><a href="http://www.k-oo.de/blog/2009/11/30/klick-dich-nicht-weg/" title="Klick Dich nicht weg! (November 30, 2009)">Klick Dich nicht weg!</a> (0)</li>
	<li><a href="http://www.k-oo.de/blog/2009/11/08/weekly-links-5/" title="weekly links (November 8, 2009)">weekly links</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.k-oo.de/blog/2007/05/07/konvertierung-unix-timestamp-zu-oracle-date/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</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 "Quasi  - Standard" für d [...]]]></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>

	Tags: <a href="http://www.k-oo.de/blog/tag/oracle/" title="Oracle" rel="tag">Oracle</a><br />

	<p></p><strong>Ähnliche Artikel:</strong>
	<ul class="st-related-posts">
	<li><a href="http://www.k-oo.de/blog/2009/09/29/monatsende-mit-oracle-sql-ermitteln/" title="Monatsende mit Oracle SQL ermitteln (September 29, 2009)">Monatsende mit Oracle SQL ermitteln</a> (0)</li>
	<li><a href="http://www.k-oo.de/blog/2009/09/16/ora-22992-und-oracles-restriktionen-fur-lobs/" title="ORA-22992 und Oracles Restriktionen für Lobs (September 16, 2009)">ORA-22992 und Oracles Restriktionen für Lobs</a> (0)</li>
	<li><a href="http://www.k-oo.de/blog/2007/05/07/konvertierung-unix-timestamp-zu-oracle-date/" title="Konvertierung Unix Timestamp zu Oracle Date (May 7, 2007)">Konvertierung Unix Timestamp zu Oracle Date</a> (2)</li>
</ul>

]]></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>
		</item>
	</channel>
</rss>
