<?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/"
	>

<channel>
	<title>SQL, perl und Unix/Linux Schulungen in und um Wien &#187; SQL Beispiele</title>
	<atom:link href="http://www.trust-box.at/category/sql-beispiele/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.trust-box.at</link>
	<description>SQL, perl und Unix/Linux Schulungen in und um Wien</description>
	<pubDate>Tue, 22 Feb 2011 10:24:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Oracle 11.2:IGNORE_ROW_ON_DUPKEY_INDEX - Please No!</title>
		<link>http://www.trust-box.at/2010/05/18/oracle-112-ignore_row_on_dupkey_index/</link>
		<comments>http://www.trust-box.at/2010/05/18/oracle-112-ignore_row_on_dupkey_index/#comments</comments>
		<pubDate>Tue, 18 May 2010 09:02:38 +0000</pubDate>
		<dc:creator>schulung</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<category><![CDATA[Oracle]]></category>

		<category><![CDATA[SQL Beispiele]]></category>

		<guid isPermaLink="false">http://www.trust-box.at/?p=97</guid>
		<description><![CDATA[Oracle hat mit 11.2 neue optimizer hints &#8220;erfunden&#8221; und zwar auch IGNORE_ROW_ON_DUPKEY_INDEX.
Er dient dazu (wie der Name schon sagt) bei einem INSERT  (und  nicht bei einem UPDATE!) auf einen Unique Key die Exception zu  ignorieren und das statement tut dann einfach nichts. Es würde dann also zb funktionieren (ohne unique key violation):
insert into [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle hat mit 11.2 neue optimizer hints &#8220;erfunden&#8221; und zwar auch <a href="http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/sql_elements006.htm#CHDEGDDG">IGNORE_ROW_ON_DUPKEY_INDEX</a>.</p>
<p>Er dient dazu (wie der Name schon sagt) bei einem INSERT  (und  nicht bei einem UPDATE!) auf einen Unique Key die Exception zu  ignorieren und das statement tut dann einfach nichts. Es würde dann also zb funktionieren (ohne unique key violation):</p>
<p><code>insert into testtable (id, text) values (1, 'testtext der erste');<br />
insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(testtable(id))*/  into testtable (id, text) values (1, 'testtext der zweite');<br />
</code></p>
<p>Dieser Hint ist eigentlich kein Hint  sondern eine Option (&#8230;), und außerdem aus mehreren Gründen keine gute  Idee:</p>
<ul>
<li>andere Oracle Hints (zb für den Optimizer) verändern das Verhalten des Statments nicht, und sind somit kompatibel mit anderen Datenbanken</li>
<li>es gibt schon ein statment mit dem man den gleichen Effekt erreichen kann und zwar MERGE, welches man mittelfristig sicher auch in <a href="http://petereisentraut.blogspot.com/2010/05/merge-syntax.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+PeterEisentraut+%28Peter+Eisentraut%27s+Blog%29">anderen Datenbanken wie Postgres </a>erwarten kann</li>
</ul>
<p>Und gleich der Vollständigkeit halber das MERGE-Statement:</p>
<p><code>merge into testtable<br />
using (select 1 from dual)<br />
on (id = :b_id)<br />
when not matched then<br />
insert (id, text) values (:b_id, :b_text);<br />
</code></p>
<p>ich verwende deswegen bind Variablen weil man ansonsten den Wert :b_id zweimal einsetzen müßte. Entgegen anderslautenden Gerüchten muß es keinen &#8220;when matched &#8230; where 2=1&#8243; (oder Ähnliches)  Abschnitt geben. Das &#8220;select 1 from dual&#8221; dient dazu um genau ein Zeile zum bekommen und somit die Zahl der zu behandelnden Zeilen zu determinieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trust-box.at/2010/05/18/oracle-112-ignore_row_on_dupkey_index/feed/</wfw:commentRss>
		</item>
		<item>
		<title>20 Jahre Mauerfall im Lichte von RDBMS</title>
		<link>http://www.trust-box.at/2009/11/09/20-jahre-mauerfall-im-lichte-von-rdbms/</link>
		<comments>http://www.trust-box.at/2009/11/09/20-jahre-mauerfall-im-lichte-von-rdbms/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 18:53:05 +0000</pubDate>
		<dc:creator>schulung</dc:creator>
		
		<category><![CDATA[Oracle]]></category>

		<category><![CDATA[SQL Beispiele]]></category>

		<guid isPermaLink="false">http://www.trust-box.at/?p=76</guid>
		<description><![CDATA[In jedem meiner Datenbankkurse predige ich ein paar Stehsätze einer davon lautet
jede Tabelle muß eine &#8220;abstrake&#8221; ID haben, und es ist sehr schlecht &#8220;scheinbar&#8221; eindeutige numerische Felder wie zum Beispiel Kontonummer, Personalnummer oder auch die Postleitzahl als ID zu mißbrauchen.
Ich bringe immer das Beispiel das eine Personentabelle mit einer Orte Tabellen über die Postleitzahl verknüpft [...]]]></description>
			<content:encoded><![CDATA[<p>In jedem meiner Datenbankkurse predige ich ein paar Stehsätze einer davon lautet</p>
<blockquote><p>jede Tabelle muß eine &#8220;abstrake&#8221; ID haben, und es ist sehr schlecht &#8220;scheinbar&#8221; eindeutige numerische Felder wie zum Beispiel Kontonummer, Personalnummer oder auch die Postleitzahl als ID zu mißbrauchen.</p></blockquote>
<p>Ich bringe immer das Beispiel das eine Personentabelle mit einer Orte Tabellen über die Postleitzahl verknüpft ist. Was von den meisten Teilnehmer mit einem begeisterten Kopfnicken quittiert wird &#8220;ist ja eh eindeutig und wird sich sicher NIE ändern&#8221;.</p>
<p>Dann kommt mein großer Moment und ich sage: &#8220;Und dann kommt die Wiedervereinigung und das ganze Datenmodell bricht zusammen!&#8221;. Das ist sehr deutlich und einprägsam - nur sind mittlerweile auch so junge Teilnehmer dabei bei denen das große Ereignis eben nicht mehr so präsent ist. Hm ich werde alt. Meine Hoffnungen ruhen auf Nord- und Südkorea für neue Beispiele.</p>
<p>In diesem Sinne ist der positive Beitrag des Mauerfalls zum Thema &#8220;Datenbankdidaktik&#8221; gar nicht hoch genug einzuschätzen!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trust-box.at/2009/11/09/20-jahre-mauerfall-im-lichte-von-rdbms/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New Feature for collections in Oracle 11</title>
		<link>http://www.trust-box.at/2009/11/08/new-feature-for-collections-in-oracle-11/</link>
		<comments>http://www.trust-box.at/2009/11/08/new-feature-for-collections-in-oracle-11/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 10:12:12 +0000</pubDate>
		<dc:creator>schulung</dc:creator>
		
		<category><![CDATA[Oracle]]></category>

		<category><![CDATA[PLSQL]]></category>

		<category><![CDATA[SQL Beispiele]]></category>

		<guid isPermaLink="false">http://www.trust-box.at/?p=72</guid>
		<description><![CDATA[Starting with Oracle 11 it is now possible to use set operators on &#8220;some&#8221; collection types (ie varrays and nested tables, NOT index by Tables).
A simple example:

PROCEDURE COLL_SET_OP
   IS
   cursor c_emp(c_p_salary number) is
   select first_name, last_name, salary from employees
   where salary > c_p_salary;
  type t_emp is [...]]]></description>
			<content:encoded><![CDATA[<p>Starting with Oracle 11 it is now possible to use set operators on &#8220;some&#8221; collection types (ie varrays and nested tables, NOT index by Tables).</p>
<p>A simple example:<br />
<code><br />
PROCEDURE COLL_SET_OP<br />
   IS<br />
   cursor c_emp(c_p_salary number) is<br />
   select first_name, last_name, salary from employees<br />
   where salary > c_p_salary;</p>
<p>  type t_emp is table of varchar2(50); </p>
<p>   a1_emp t_emp := t_emp();<br />
   a2_emp t_emp := t_emp();</p>
<p>   a_emp_op t_emp := t_emp();<br />
   i number := 0;<br />
BEGIN<br />
   for r in c_emp(5000) loop<br />
     i := i+1;<br />
     a1_emp.extend;<br />
     a1_emp(i) := r.last_name;<br />
   end loop;</p>
<p>   i:=0;<br />
   for r in c_emp(10000) loop<br />
     i := i+1;<br />
     a2_emp.extend;<br />
     a2_emp(i) := r.last_name;<br />
   end loop;</p>
<p>   dbms_output.put_line(cardinality(a1_emp));<br />
   dbms_output.put_line(cardinality(a2_emp));</p>
<p>   a_emp_op := a1_emp multiset except a2_emp;<br />
   i:=a_emp_op.first;<br />
   while (i is not null) loop<br />
   dbms_output.put_line(i ||' '||<br />
                       a_emp_op(i));</p>
<p>   i:=a_emp_op.next(i);<br />
   end loop;<br />
END;<br />
</code></p>
<p>there are operators to mimic all SQL-set operators (union, minus, intersect). Its not exaclty a feature in PLSQL I&#8217;ve been anxiously waiting for, but there may be some uses for it. Please keep in mind that it won&#8217;t work for &#8220;index by varchar2&#8243; tables which would make it a lot more usefull.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trust-box.at/2009/11/08/new-feature-for-collections-in-oracle-11/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Compare available Objects on two Oracle Instances</title>
		<link>http://www.trust-box.at/2009/11/06/compare-available-objects-on-two-oracle-instances/</link>
		<comments>http://www.trust-box.at/2009/11/06/compare-available-objects-on-two-oracle-instances/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 10:13:23 +0000</pubDate>
		<dc:creator>schulung</dc:creator>
		
		<category><![CDATA[Oracle]]></category>

		<category><![CDATA[SQL Beispiele]]></category>

		<guid isPermaLink="false">http://www.trust-box.at/?p=70</guid>
		<description><![CDATA[Compare available Objects on two Oracle Instances
For this snippet to work you need a functioning database link

select object_name, object_type from user_objects@;
minus
select object_name, object_type from user_objects

to get the actual DDL (for a package body in this example) statments you have to issue

select referenced_name, dbms_metadata.get_ddl(referenced_type, referenced_name) from (
  select name, type, referenced_name, referenced_type from
   [...]]]></description>
			<content:encoded><![CDATA[<p>Compare available Objects on two Oracle Instances</p>
<p>For this snippet to work you need a functioning database link</p>
<p><code><br />
select object_name, object_type from user_objects@<dblink>;<br />
minus<br />
select object_name, object_type from user_objects<br />
</code></p>
<p>to get the actual DDL (for a package body in this example) statments you have to issue</p>
<p><code><br />
select referenced_name, dbms_metadata.get_ddl(referenced_type, referenced_name) from (<br />
  select name, type, referenced_name, referenced_type from<br />
    user_dependencies where name='<OBJECT_NAME>&#8216; and type=&#8217;PACKAGE BODY&#8217;<br />
    minus<br />
  select name, type, referenced_name, referenced_type from user_dependencies@<dblink>;<br />
) where referenced_name not in (&#8217;STANDARD&#8217;, &#8216;DBMS_OUTPUT&#8217;, &#8216;DUAL&#8217;)<br />
and referenced_name not in (select object_name from user_objects@<dblink>)<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trust-box.at/2009/11/06/compare-available-objects-on-two-oracle-instances/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Die With Clause</title>
		<link>http://www.trust-box.at/2007/11/23/die-with-clause/</link>
		<comments>http://www.trust-box.at/2007/11/23/die-with-clause/#comments</comments>
		<pubDate>Fri, 23 Nov 2007 15:23:34 +0000</pubDate>
		<dc:creator>schulung</dc:creator>
		
		<category><![CDATA[SQL Beispiele]]></category>

		<guid isPermaLink="false">http://www.trust-box.at/2007/11/23/die-with-clause/</guid>
		<description><![CDATA[Möchte man herausfinden welcher Vermieter wieviel Autos mit welchem Extra anbietet, also zum Beispiel wieviele Autos hat &#8220;Karls Luxuskutschen&#8221; mit Klimaanlage und Automatik, kommt einem die &#8220;with clause&#8221; zur Hilfe
  with verm_extras as  (   SELECT  vrm_name,           ext_name    [...]]]></description>
			<content:encoded><![CDATA[<p>Möchte man herausfinden welcher Vermieter wieviel Autos mit welchem Extra anbietet, also zum Beispiel wieviele Autos hat &#8220;Karls Luxuskutschen&#8221; mit Klimaanlage und Automatik, kommt einem die &#8220;with clause&#8221; zur Hilfe</p>
<p><code>  with verm_extras as  (   SELECT  vrm_name,           ext_name     FROM tst_vermieter, tst_fahrzeuge, tst_fhz_ext_int, tst_extras          WHERE (    (tst_vermieter.vrm_id = tst_fahrzeuge.fhz_vrm_id)          AND (tst_fahrzeuge.fhz_id = tst_fhz_ext_int.fei_fhz_id(+))          AND (tst_extras.ext_id(+) = tst_fhz_ext_int.fei_ext_id)           )   ) select distinct e.vrm_name, e.ext_name, nvl(extras_count, 0) c     from verm_extras e,     (select vrm_name, ext_name, count(ext_name) as extras_count from verm_extras                    group by vrm_name, ext_name) ec     where      ec.vrm_name = e.vrm_name and      ec.ext_name = e.ext_name  order by e.vrm_name </code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trust-box.at/2007/11/23/die-with-clause/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Outer Join</title>
		<link>http://www.trust-box.at/2007/09/07/outer-join/</link>
		<comments>http://www.trust-box.at/2007/09/07/outer-join/#comments</comments>
		<pubDate>Fri, 07 Sep 2007 10:46:00 +0000</pubDate>
		<dc:creator>schulung</dc:creator>
		
		<category><![CDATA[SQL Beispiele]]></category>

		<guid isPermaLink="false">http://www.trust-box.at/2007/09/07/outer-join/</guid>
		<description><![CDATA[Auf der Übungsdatenbank ausgeführt:
  SELECT vrm_name, fhz_name FROM tst_fahrzeuge, tst_vermieter WHERE vrm_id = fhz_vrm_id  
liefert alle Fahrzeuge, zugeordnet zum jeweiligen Vermieter



VRM_NAME
FHZ_NAME


Juris used Cars
Wolga


Juris used Cars
Lada


Juris used Cars
Wartburg


Juris used Cars
Tschaika


Juris used Cars
Skoda


Karls Luxuskutschen
Mercedes


Karls Luxuskutschen
Rolls Royce


Karls Luxuskutschen
Maybach


Karls Luxuskutschen
Bentley


Karls Luxuskutschen
Ferrari


Yamatos Joghurtbecher
Toyota


Yamatos Joghurtbecher
Honda


Yamatos Joghurtbecher
Mazda


Yamatos Joghurtbecher
Nissan


Yamatos Joghurtbecher
Suzuki


Yamatos Joghurtbecher
Lexus



]]></description>
			<content:encoded><![CDATA[<p>Auf der <a href="http://www.trust-box.at/ubungsdatenbank/">Übungsdatenbank</a> ausgeführt:<br />
<code>  SELECT vrm_name, fhz_name FROM tst_fahrzeuge, tst_vermieter WHERE vrm_id = fhz_vrm_id  </code></p>
<p>liefert alle Fahrzeuge, zugeordnet zum jeweiligen Vermieter</p>
<p><!--StartFragment--></p>
<table>
<tr bgcolor="#afafaf">
<td><strong>VRM_NAME</strong></td>
<td><strong>FHZ_NAME</strong></td>
</tr>
<tr>
<td>Juris used Cars</td>
<td>Wolga</td>
</tr>
<tr>
<td>Juris used Cars</td>
<td>Lada</td>
</tr>
<tr>
<td>Juris used Cars</td>
<td>Wartburg</td>
</tr>
<tr>
<td>Juris used Cars</td>
<td>Tschaika</td>
</tr>
<tr>
<td>Juris used Cars</td>
<td>Skoda</td>
</tr>
<tr>
<td>Karls Luxuskutschen</td>
<td>Mercedes</td>
</tr>
<tr>
<td>Karls Luxuskutschen</td>
<td>Rolls Royce</td>
</tr>
<tr>
<td>Karls Luxuskutschen</td>
<td>Maybach</td>
</tr>
<tr>
<td>Karls Luxuskutschen</td>
<td>Bentley</td>
</tr>
<tr>
<td>Karls Luxuskutschen</td>
<td>Ferrari</td>
</tr>
<tr>
<td>Yamatos Joghurtbecher</td>
<td>Toyota</td>
</tr>
<tr>
<td>Yamatos Joghurtbecher</td>
<td>Honda</td>
</tr>
<tr>
<td>Yamatos Joghurtbecher</td>
<td>Mazda</td>
</tr>
<tr>
<td>Yamatos Joghurtbecher</td>
<td>Nissan</td>
</tr>
<tr>
<td>Yamatos Joghurtbecher</td>
<td>Suzuki</td>
</tr>
<tr>
<td>Yamatos Joghurtbecher</td>
<td>Lexus</td>
</tr>
</table>
<p><!--EndFragment--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trust-box.at/2007/09/07/outer-join/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

