<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7395977411859619892</id><updated>2012-01-31T23:24:52.095+01:00</updated><title type='text'>About Oracle</title><subtitle type='html'>&lt;a href="http://forums.oracle.com/forums/message.jspa?messageID=1732482#1732482"&gt;Simplicity is the ultimate form of elegance and sophistication&lt;/a&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default?start-index=101&amp;max-results=100'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>136</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-4948085606394176670</id><published>2011-09-25T12:03:00.000+02:00</published><updated>2011-09-26T00:02:59.681+02:00</updated><title type='text'>EXISTS</title><summary type='text'>Most of us know the SQL keyword EXISTS as the condition with a subquery you use in a WHERE clause. But if you look at the documentation of EXISTS, you'll see that it says nothing about just using it in a WHERE clause. It's just a sort of function that accepts a query as input and returns "TRUE if a subquery returns at least one row". The SQL language doesn't know about booleans, but it calls </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/4948085606394176670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2011/09/exists.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4948085606394176670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4948085606394176670'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2011/09/exists.html' title='EXISTS'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3577206452054038776</id><published>2011-07-12T22:00:00.001+02:00</published><updated>2011-07-12T22:20:05.828+02:00</updated><title type='text'>Partitioned outer join bug</title><summary type='text'>I have experienced a strange bug when constructing an example showing how a partitioned outer join works. I used a setup which resembles a situation I have consulted about recently for timeseries data. The table can hold multiple timeseries whose data is coming from multiple sources. The data itself contains volumes that are reported for every 5 minutes. This table looks like this:SQL&gt; create </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3577206452054038776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2011/07/partitioned-outer-join-bug.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3577206452054038776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3577206452054038776'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2011/07/partitioned-outer-join-bug.html' title='Partitioned outer join bug'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-2117993555443705481</id><published>2011-07-11T21:59:00.002+02:00</published><updated>2011-07-11T22:10:22.902+02:00</updated><title type='text'>Tutorials zur SQL Model Clause</title><summary type='text'>Marcus Matzberger has translated five of my posts related to the SQL Model Clause for the German speaking Oracle community. Those posts now contain links to the German versions and I've listed them here for convenience as well.SQL Model Clause Tutorial Part OneSQL Model Clause Tutorial Part TwoSQL Model Clause Tutorial Part ThreeCalculating probabilities with N throws of a dieChoosing Between SQL</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/2117993555443705481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2011/07/tutorials-zur-sql-model-clause.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2117993555443705481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2117993555443705481'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2011/07/tutorials-zur-sql-model-clause.html' title='Tutorials zur SQL Model Clause'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8733076490520471580</id><published>2011-06-11T23:22:00.001+02:00</published><updated>2011-06-11T23:24:49.044+02:00</updated><title type='text'>Back from Tallinn, Estonia</title><summary type='text'>This morning I arrived back from a trip to Tallinn. Oracle Estonia had given me the opportunity to present my SQL Masterclass seminar at their training center in Tallinn, on Thursday and Friday. Thank you all those who spent two days hearing me. Here is a short story about my trip including some photos.I arrived at Tallinn airport around 1PM local time on Wednesday. My hotel room was located at </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8733076490520471580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2011/06/back-from-tallinn-estonia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8733076490520471580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8733076490520471580'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2011/06/back-from-tallinn-estonia.html' title='Back from Tallinn, Estonia'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-5GsOlDt6j-E/TfJqK4nsoHI/AAAAAAAAAN4/AZr_jOJxHf0/s72-c/tallinn6.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-7526562443270901102</id><published>2011-05-26T18:00:00.001+02:00</published><updated>2011-05-26T18:00:02.613+02:00</updated><title type='text'>Instrumentation packages</title><summary type='text'>At CIBER we are doing a series of knowledge sessions where several colleagues are doing a one-hour presentation about one or two package of their choice. We have already heard several very interesting presentations about DBMS_HPROF, DBMS_PARALLEL_EXECUTE, UTL_DBWS, UTL_TCP and DBMS_FGA. And this evening a colleague will do a presentation about DBMS_PREPROCESSOR and DBMS_WARNING, and I will do one</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/7526562443270901102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2011/05/instrumentation-packages.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7526562443270901102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7526562443270901102'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2011/05/instrumentation-packages.html' title='Instrumentation packages'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8979117568677788266</id><published>2011-03-23T23:01:00.001+01:00</published><updated>2011-03-23T23:03:10.689+01:00</updated><title type='text'>OGh APEX day 2011</title><summary type='text'>Yesterday I attended OGh's APEX day. Previous year was already pretty successful with 150 people attending. This year the maximum of 150 people was reached in only a few days, so we scaled up the event to a maximum of 250 people, and in the end we still had to disappoint several people. And this year we had several sponsors as well: Oracle, Ciber, Transfer Solutions and Itium. These must be signs</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8979117568677788266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2011/03/ogh-apex-day-2011.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8979117568677788266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8979117568677788266'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2011/03/ogh-apex-day-2011.html' title='OGh APEX day 2011'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-780422978219971838</id><published>2011-03-17T23:15:00.002+01:00</published><updated>2011-03-19T00:14:32.661+01:00</updated><title type='text'>Open cursor paranoia</title><summary type='text'>Most PL/SQL developers will likely have witnessed this phenomenon several times during their career. But only in other people's code, of course :-). I'm talking about PL/SQL code where every program unit ends like this:exceptionwhen others then  if c%isopen  then    close c;  end if;  raise;end;where lines 3 to 6 are repeated for every cursor in the block above.Proponents of open cursor paranoia </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/780422978219971838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2011/03/open-cursor-paranoia.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/780422978219971838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/780422978219971838'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2011/03/open-cursor-paranoia.html' title='Open cursor paranoia'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-4103963309913113654</id><published>2011-03-15T22:13:00.002+01:00</published><updated>2011-03-15T22:13:50.653+01:00</updated><title type='text'>Runtime error ORA-01031: insufficient privileges</title><summary type='text'>After a new version of software was installed in production, the end users reported a runtime error: ORA-01031: insufficient privileges, when selecting from a view. The developers of the code were investigating the problem and half way through, they asked me to have a look at the problem. I saw a function from schema3, which was used in a view in schema2, which was used by schema1. I had just </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/4103963309913113654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2011/03/runtime-error-ora-01031-insufficient.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4103963309913113654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4103963309913113654'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2011/03/runtime-error-ora-01031-insufficient.html' title='Runtime error ORA-01031: insufficient privileges'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-2606940521044766965</id><published>2011-02-27T15:55:00.005+01:00</published><updated>2011-02-27T20:15:40.668+01:00</updated><title type='text'>Questions about the result cache</title><summary type='text'>Last year I have presented a couple of times about the result cache. You can download this presentation from my new Presentations and papers tabpage, by the way. After each of those sessions I received several good questions. To some questions I didn't know the answer, and for some other questions I did, but I hadn't tested it so I wasn't absolutely sure. I promised to address those questions </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/2606940521044766965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2011/02/questions-about-result-cache.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2606940521044766965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2606940521044766965'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2011/02/questions-about-result-cache.html' title='Questions about the result cache'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5029134696100949896</id><published>2011-02-25T20:58:00.002+01:00</published><updated>2011-02-25T21:24:57.812+01:00</updated><title type='text'>SQL Masterclass in Tallinn, Estonia</title><summary type='text'>On June 9 and 10, I'll be doing a SQL Masterclass seminar for Oracle University in Tallinn, Estonia. You can find the details here.</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5029134696100949896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2011/02/sql-masterclass-in-tallinn-estonia.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5029134696100949896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5029134696100949896'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2011/02/sql-masterclass-in-tallinn-estonia.html' title='SQL Masterclass in Tallinn, Estonia'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-4891111335285511224</id><published>2011-02-15T22:08:00.006+01:00</published><updated>2011-02-17T14:04:57.980+01:00</updated><title type='text'>A tip, a conference, an extension and a challenge</title><summary type='text'>This post contains four unrelated notes.First a small SQL*Plus tip. I really like to know with which user I am connected to which database, so in my login.sql script I used to have this section:define gname=idlecolumn global_name new_value gnameselect lower(user) || '@' ||       substr(global_name,1,decode(dot,0,length(global_name),dot-1)) global_namefrom (select global_name,instr(global_name,'.'</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/4891111335285511224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2011/02/tip-conference-extension-and-challenge.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4891111335285511224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4891111335285511224'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2011/02/tip-conference-extension-and-challenge.html' title='A tip, a conference, an extension and a challenge'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-1609854363652999558</id><published>2010-12-30T20:37:00.002+01:00</published><updated>2010-12-30T22:24:10.847+01:00</updated><title type='text'>Translating and more with Google API's</title><summary type='text'>Google has a lot of API's that you can use in SQL and PL/SQL as well. A couple of months ago I saw a very nice example on OTN here. It was an example of how to use Google's Translate API. Here is how to do it yourself.First of all, since version 11, you need to specify fine grained access to external network services, which is described here in the documentation. The package </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/1609854363652999558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/12/translating-and-more-with-google-apis.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1609854363652999558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1609854363652999558'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/12/translating-and-more-with-google-apis.html' title='Translating and more with Google API&apos;s'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3944181315545481280</id><published>2010-10-13T23:59:00.000+02:00</published><updated>2010-10-14T00:09:07.669+02:00</updated><title type='text'>Aggregating over zero rows</title><summary type='text'>In my presentation and paper about grouping last year, I mentioned that an aggregation query without a group by clause is the same as grouping by the empty grouping set. So this query:SQL&gt; select count(*)  2    from emp  3  /  COUNT(*)----------        141 rij is geselecteerd.is the same as:SQL&gt; select count(*)  2    from emp  3   group by ()  4  /  COUNT(*)----------        141 rij is </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3944181315545481280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/10/aggregating-over-zero-rows.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3944181315545481280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3944181315545481280'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/10/aggregating-over-zero-rows.html' title='Aggregating over zero rows'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-9066705349863736342</id><published>2010-09-26T17:34:00.002+02:00</published><updated>2010-09-26T23:22:51.127+02:00</updated><title type='text'>OOW10</title><summary type='text'>Yesterday I came back from my third Oracle OpenWorld. This year I was not on a bloggers pass, so I feel less obliged to cover the event. But I know there are people out there that like to read about my experiences and I still like it very much at San Francisco, so here is a small write-up about my experiences at Oracle OpenWorld 2010.The event started at Sunday, but later than usual: 12:30 PM I </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/9066705349863736342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/09/oow10.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/9066705349863736342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/9066705349863736342'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/09/oow10.html' title='OOW10'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5963892661235082341</id><published>2010-09-17T21:53:00.002+02:00</published><updated>2010-09-18T00:38:50.183+02:00</updated><title type='text'>Upcoming conferences</title><summary type='text'>Tomorrow I'm off to Oracle OpenWorld for the third time in a row. I'm looking forward to a week attending great sessions, meeting friends, visiting the appreciation event, the Oracle ACE dinner and the Blogger's Meetup and presenting my session about the result cache. If you want to attend that session, the session details are:ID#: S319106Title: Oracle Database 11g’s Result CacheDate: 22-SEP-</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5963892661235082341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/09/upcoming-conferences.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5963892661235082341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5963892661235082341'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/09/upcoming-conferences.html' title='Upcoming conferences'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-7571176264282007978</id><published>2010-07-15T22:10:00.005+02:00</published><updated>2010-07-15T22:32:17.555+02:00</updated><title type='text'>European Summer Time</title><summary type='text'>I needed a function to determine how many hours fit in a given day. In the Netherlands, a function that does "return 24;" is not good enough. In the northern hemisphere, Daylight Saving Time is quite common. And in Europe, except Iceland, we have European Summer Time which states that the clock moves one hour forward on the last Sunday in March and it moves one hour backwards on the last Sunday </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/7571176264282007978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/07/european-summer-time.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7571176264282007978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7571176264282007978'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/07/european-summer-time.html' title='European Summer Time'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-4868559406937559279</id><published>2010-07-15T19:21:00.001+02:00</published><updated>2010-07-16T15:20:37.233+02:00</updated><title type='text'>The PL/SQL Challenge effect</title><summary type='text'>In Google Analytics I noticed a strange peak in my page visits. On a normal weekday when I haven't posted something new, approximately 200 people visit one or more blogposts here. But on Thursday July 8, there were 299. When zooming in on that day, I noticed that my blogpost about SAVE EXCEPTIONS was visited 101 times, where 5 or 10 per day is normal for that blogpost. When something like this </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/4868559406937559279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/07/plsql-challenge-effect.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4868559406937559279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4868559406937559279'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/07/plsql-challenge-effect.html' title='The PL/SQL Challenge effect'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3038189969814366967</id><published>2010-06-20T11:40:00.004+02:00</published><updated>2010-06-20T14:31:03.610+02:00</updated><title type='text'>One Oracle forum to rule them all</title><summary type='text'>Previous year I already expressed some of my thoughts on the OTN Forums and Stack Overflow here. In short my story was: I absolutely love the Q&amp;A engine of Stack Overflow, but the best answers can be found on OTN. However, with more knowledgeable people appearing on Stack Overflow, the gap is closing. In the comments section and from conversations I came to know that there is still some </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3038189969814366967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/06/one-oracle-forum-to-rule-them-all.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3038189969814366967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3038189969814366967'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/06/one-oracle-forum-to-rule-them-all.html' title='One Oracle forum to rule them all'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-1262083838629197201</id><published>2010-06-15T23:30:00.004+02:00</published><updated>2010-07-10T23:28:57.791+02:00</updated><title type='text'>Oracle 11g's Result Cache at OOW10?</title><summary type='text'>Oracle Mix has a Suggest-a-Session facility for Oracle OpenWorld 2010. Some 120+ sessions are already suggested and you can vote on the sessions you'd like to see on Oracle OpenWorld. The sessions with the most votes will be selected in the program.My proposal is a session about Oracle 11g's Result Cache. Already 24 people have voted for my session (thank you!), but it looks like I need a couple </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/1262083838629197201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/06/oracle-11gs-result-cache-at-oow10.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1262083838629197201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1262083838629197201'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/06/oracle-11gs-result-cache-at-oow10.html' title='Oracle 11g&apos;s Result Cache at OOW10?'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3107686993894296830</id><published>2010-06-15T23:09:00.002+02:00</published><updated>2010-06-15T23:27:53.088+02:00</updated><title type='text'>Simulating LAG/LEAD IGNORE NULLS</title><summary type='text'>From version 11 onwards, the analytic functions LAG and LEAD have the extra option to RESPECT or IGNORE NULLS. This comes in handy when -for example- you don't want a regular next value like this:rwijk@ORA11GR2&gt; select empno  2       , comm  3       , lead(comm) over (order by empno) next_comm  4    from emp  5   order by empno  6  /     EMPNO       COMM  NEXT_COMM---------- ---------- ----------</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3107686993894296830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/06/simulating-laglead-ignore-nulls.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3107686993894296830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3107686993894296830'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/06/simulating-laglead-ignore-nulls.html' title='Simulating LAG/LEAD IGNORE NULLS'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-1294904748088672271</id><published>2010-05-31T21:48:00.002+02:00</published><updated>2010-06-01T00:10:46.072+02:00</updated><title type='text'>Exponential Moving Average</title><summary type='text'>There was a nice question on OTN today about whether there is a standard Oracle function to calculate the exponential moving average. The answer is that there is no such function, but with the model clause, you can calculate it very easy. And it's a great example of what I mean with "variable number of calculations based on calculated values", written in my third part of the model clause </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/1294904748088672271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/05/exponential-moving-average.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1294904748088672271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1294904748088672271'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/05/exponential-moving-average.html' title='Exponential Moving Average'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-4485457758053425043</id><published>2010-04-01T21:09:00.002+02:00</published><updated>2010-04-01T21:17:46.484+02:00</updated><title type='text'>SQL injection to the rescue</title><summary type='text'>Ok, I may be the last person seeing this, but I thought this is just too funny not to share it. I found a way to get rid of those annoying speeding tickets.</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/4485457758053425043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/04/sql-injection-to-rescue.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4485457758053425043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4485457758053425043'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/04/sql-injection-to-rescue.html' title='SQL injection to the rescue'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-7215237970470852181</id><published>2010-03-30T23:44:00.001+02:00</published><updated>2010-03-31T10:40:34.634+02:00</updated><title type='text'>March 30: OGh APEX dag</title><summary type='text'>Today was OGh's APEX day. I saw 5 good presentations, in which I was not bored by Powerpoint once. I probably missed a few other good ones, since in the afternoon we all had to make some hard decisions about which presentation to visit and which ones to skip.The first presentation was by Kitty Spaas and Mark Rooijakkers called "Centraal Boekhuis goes APEX". An informative and very entertaining </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/7215237970470852181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/03/march-30-ogh-apex-dag.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7215237970470852181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7215237970470852181'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/03/march-30-ogh-apex-dag.html' title='March 30: OGh APEX dag'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-7419053149146382944</id><published>2010-03-29T22:37:00.001+02:00</published><updated>2010-03-29T22:30:42.875+02:00</updated><title type='text'>Shredding XML into multiple tables in one shot</title><summary type='text'>To insert the data from an XML document into multiple relational tables, you can use PL/SQL, loop statements and the extract function. But I wanted to know whether it is possible to do it using only SQL. With the XMLTable function you can transform an XML document to a relational format. This post will show how you can use the XMLTable function to store the data into relational tables with a </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/7419053149146382944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/03/shredding-xml-into-multiple-tables-in.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7419053149146382944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7419053149146382944'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/03/shredding-xml-into-multiple-tables-in.html' title='Shredding XML into multiple tables in one shot'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-6870618166782812965</id><published>2010-03-08T22:42:00.002+01:00</published><updated>2010-03-08T23:07:33.136+01:00</updated><title type='text'>Weird exception handling</title><summary type='text'>PL/SQL got me fooled today. My assignment was to build a new procedure that gets invoked together with an existing procedure. After I had build and unit tested my new procedure, the tester wanted to conduct a system integration test. He had trouble coming up with a situation where the old and new procedure were called. So I helped him by having a look at some of the surrounding code and my </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/6870618166782812965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/03/weird-exception-handling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/6870618166782812965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/6870618166782812965'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/03/weird-exception-handling.html' title='Weird exception handling'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3683870472317896157</id><published>2010-02-15T22:04:00.003+01:00</published><updated>2010-02-15T22:22:45.345+01:00</updated><title type='text'>OGh APEX dag</title><summary type='text'>Tuesday March 30, the Dutch Oracle usergroup OGh organizes one entire day dedicated to APEX. I'm a little biased, as I helped organizing the event, but I think we succeeded in putting together a great program, as you can see here (warning: Dutch). The lineup includes some very well known APEX speakers like Patrick Wolf, Dimitri Gielis and Roel Hartman.The schedule also includes three sessions </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3683870472317896157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/02/ogh-apex-dag.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3683870472317896157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3683870472317896157'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/02/ogh-apex-dag.html' title='OGh APEX dag'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3375155891102694659</id><published>2010-01-15T22:42:00.004+01:00</published><updated>2010-01-16T11:11:02.594+01:00</updated><title type='text'>enq: JI - contention</title><summary type='text'>To implement entity rules and inter-entity rules, one of the options is to use an on commit-time fast refreshable materialized view with a check constraint on top. You can read a few examples in these posts. It's an elegant way to check for conditions at commit-time, and quite remarkable when you see it for the first time. But there is a serious caveat to this way of implementing business rules, </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3375155891102694659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/01/enq-ji-contention.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3375155891102694659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3375155891102694659'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/01/enq-ji-contention.html' title='enq: JI - contention'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-1876705364306442190</id><published>2010-01-10T22:41:00.000+01:00</published><updated>2010-01-10T22:41:34.365+01:00</updated><title type='text'>CAST-COLLECT versus CAST-MULTISET</title><summary type='text'>At work I am building an interface using SQL object types and SQL collection types. I noticed a difference between using the COLLECT aggregate function in combination with a CAST function, versus the CAST-MULTISET method. I started out using CAST-COLLECT, but switched to CAST-MULTISET. Here is a simulation:rwijk@ORA11GR1&gt; create table customers  2  ( id        number(6)    not null primary key  3</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/1876705364306442190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/01/cast-collect-versus-cast-multiset.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1876705364306442190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1876705364306442190'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/01/cast-collect-versus-cast-multiset.html' title='CAST-COLLECT versus CAST-MULTISET'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-7238336251006495902</id><published>2010-01-03T16:08:00.005+01:00</published><updated>2010-01-03T20:22:49.373+01:00</updated><title type='text'>Holiday Challenge Time</title><summary type='text'>This was the title of a thread on OTN's SQL and PL/SQL Forum. Centinul posted an interesting puzzle to be solved by either SQL or PL/SQL here. If you like to puzzle yourself, then stop reading here, and go visit the link (and don't look at the answers of course :-) ).The puzzle was not only a great way to spend time, it's also a nice show case for hierarchical queries and the answer of Frank </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/7238336251006495902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2010/01/holiday-challenge-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7238336251006495902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7238336251006495902'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2010/01/holiday-challenge-time.html' title='Holiday Challenge Time'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_EElgcElJ00c/S0CYK07scrI/AAAAAAAAALc/PX0kgkh_qKs/s72-c/centinul_puzzle.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3295418741166615079</id><published>2009-12-31T14:57:00.000+01:00</published><updated>2009-12-31T14:58:14.026+01:00</updated><title type='text'>Paper about grouping</title><summary type='text'>In 2009 I have presented "Alles Over Groeperen" twice in the Netherlands and the English version "All About Grouping" also twice, once at the Oracle OpenWorld Unconference and once at UKOUG. If you haven't been able to visit one of these presentations, and you are interested in the subject, then you can catch up by reading the paper that I just finished.The usual sequence of events is to first </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3295418741166615079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/12/paper-about-grouping.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3295418741166615079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3295418741166615079'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/12/paper-about-grouping.html' title='Paper about grouping'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5927257038851978399</id><published>2009-12-16T16:00:00.001+01:00</published><updated>2009-12-16T17:05:39.548+01:00</updated><title type='text'>Journaling using flashback data archives in 11.2.0.1?</title><summary type='text'>In version 11.1.0.6, Oracle introduced flashback data archives under the marketing term Total Recall. Previously you could only flashback your table to an earlier point in time, as long as the needed undo information was available. With flashback data archives you can extend this period with as long as you specify. You create a flashback data archive, specify a retention period and associate the </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5927257038851978399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/12/journaling-using-flashback-data.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5927257038851978399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5927257038851978399'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/12/journaling-using-flashback-data.html' title='Journaling using flashback data archives in 11.2.0.1?'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8915434480494173439</id><published>2009-12-09T00:39:00.000+01:00</published><updated>2009-12-09T00:40:14.166+01:00</updated><title type='text'>SYS_GUID()</title><summary type='text'>A colleague of mine sent me this link, and wanted me to have a look at point 5:Choose sys_guid() instead of sequences for populating meaningless PK-columns.Traditional sequences are used for populating an ID-column.Sequences have several disadvantages:• Sequences have to be created, maintained and deployed.• Sequences need PL/SQL-code to be fetched (the ‘select into’ construction is obsolete in </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8915434480494173439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/12/sysguid.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8915434480494173439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8915434480494173439'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/12/sysguid.html' title='SYS_GUID()'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3522119693172519451</id><published>2009-12-03T17:03:00.001+01:00</published><updated>2009-12-03T17:04:15.280+01:00</updated><title type='text'>UKOUG 2009</title><summary type='text'>UKOUG Conference Series, Technology &amp; E-Business Suite 2009 is over. Three days were filled with highly technical presentations in several streams. It was my first time, and I hope it wasn't my last time.The presentations I saw were:John Scott - Building Scalable Applications with Oracle Application ExpressJoel Goodman - Oracle Database Links part 2 - Distributed TransactionsJonathan Lewis - </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3522119693172519451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/12/ukoug-2009.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3522119693172519451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3522119693172519451'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/12/ukoug-2009.html' title='UKOUG 2009'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8552259482806207465</id><published>2009-11-24T23:38:00.000+01:00</published><updated>2009-11-25T08:49:33.449+01:00</updated><title type='text'>Recursive subquery factoring</title><summary type='text'>Version 11g release 2 introduced recursive subquery factoring or the recursive with clause. This is an extension to the SQL syntax with which you can do recursive/hierarchical queries. However, since version 2, Oracle has had the connect-by clause for hierarchical queries. And at first glance, the connect-by and the recursive-with seem very similar in what they can do. But on a second look, there</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8552259482806207465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/11/recursive-subquery-factoring.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8552259482806207465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8552259482806207465'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/11/recursive-subquery-factoring.html' title='Recursive subquery factoring'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8675649878352478658</id><published>2009-11-17T22:04:00.001+01:00</published><updated>2009-11-18T09:15:36.064+01:00</updated><title type='text'>OGh's ACE Case: Oracle 11g Release 2 for developers</title><summary type='text'>This year, the Dutch Oracle usergroup OGh has started to offer a set of 4 presentations, called the ACE Cases. Each presentation is given by a Dutch Oracle ACE about his specialty. The first one was about XMLDB by Marco Gralike. The second one was about SOA Governance by Mike van Alst. For the third one, OGh had invited me to talk about something related to the subject "database". Today I had the</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8675649878352478658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/11/oghs-ace-case-oracle-11g-release-2-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8675649878352478658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8675649878352478658'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/11/oghs-ace-case-oracle-11g-release-2-for.html' title='OGh&apos;s ACE Case: Oracle 11g Release 2 for developers'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-1715074278381416279</id><published>2009-10-28T23:45:00.000+01:00</published><updated>2009-10-28T23:47:46.551+01:00</updated><title type='text'>Three new "hints"</title><summary type='text'>In version 11.2.0.1, Oracle introduced three new hints: IGNORE_ROW_ON_DUPKEY_INDEX, CHANGE_DUPKEY_ERROR_INDEX and RETRY_ON_ROW_CHANGE. These are not normal hints like we know them. Oracle writes:Note:The CHANGE_DUPKEY_ERROR_INDEX, IGNORE_ROW_ON_DUPKEY_INDEX, and RETRY_ON_ROW_CHANGE hints are unlike other hints in that they have a semantic effect. The general philosophy explained in "Hints" does </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/1715074278381416279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/10/three-new-hints.html#comment-form' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1715074278381416279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1715074278381416279'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/10/three-new-hints.html' title='Three new &quot;hints&quot;'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3803599612431740074</id><published>2009-10-18T11:57:00.000+02:00</published><updated>2009-10-18T11:59:25.644+02:00</updated><title type='text'>All About Grouping at Oracle OpenWorld</title><summary type='text'>On Thursday 10AM I gave a presentation at the Unconference called "All About Grouping". I really need to think more about titles of presentations, as two people came in with the question "What kind of grouping will you be talking about?". Fortunately, when I mentioned it was about grouping in SQL and especially the extensions ROLLUP, CUBE and GROUPING SETS, they stayed.I had given the </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3803599612431740074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/10/all-about-grouping-at-oracle-openworld.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3803599612431740074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3803599612431740074'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/10/all-about-grouping-at-oracle-openworld.html' title='All About Grouping at Oracle OpenWorld'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5374186825907566388</id><published>2009-10-16T18:04:00.001+02:00</published><updated>2009-10-16T18:07:19.326+02:00</updated><title type='text'>Oracle OpenWorld 2009, the last three days</title><summary type='text'>Tuesday was a very rainy day. I decided to take the shuttle bus to the Moscone and was therefore a little late for the first session. The sessions I visited this day were:Dan Morgan - What's New in Eleven ... Dot Two (that Oracle won't be talking about)In every release there are like two types of features. On the one side there are features that are picked up by marketing and which are given </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5374186825907566388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/10/oracle-openworld-2009-last-three-days.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5374186825907566388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5374186825907566388'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/10/oracle-openworld-2009-last-three-days.html' title='Oracle OpenWorld 2009, the last three days'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5175221821864348736</id><published>2009-10-13T16:56:00.000+02:00</published><updated>2009-10-13T16:58:02.646+02:00</updated><title type='text'>Oracle OpenWorld 2009, the first two days</title><summary type='text'>This year I'm visiting Oracle OpenWorld for the second time. Everything is now familiar, except for two differences. First one is the location of Oracle Develop, which has moved back to the Hilton Hotel, instead of the nearby Marriot Hotel. It is a nice walk, but sometimes you cannot chat after a session if you have a next session at the Moscone Center. Second difference is that it seems to me </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5175221821864348736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/10/oracle-openworld-2009-first-two-days.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5175221821864348736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5175221821864348736'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/10/oracle-openworld-2009-first-two-days.html' title='Oracle OpenWorld 2009, the first two days'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-4847529436712274046</id><published>2009-09-14T22:47:00.000+02:00</published><updated>2009-09-14T22:48:35.391+02:00</updated><title type='text'>Check constraints and AND</title><summary type='text'>Remember the opening statement of the MV error series? It was "Never put more than one error condition into one error message". Two months later I realized I didn't practice what I preach myself.I'm currently busy developing a Tour de France application at home. The application has to store the standings. After each stage, a daily and overall standing becomes available for each of the following </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/4847529436712274046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/09/check-constraints-and-and.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4847529436712274046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4847529436712274046'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/09/check-constraints-and-and.html' title='Check constraints and AND'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3213708588382353273</id><published>2009-09-14T20:53:00.001+02:00</published><updated>2009-09-14T20:55:28.519+02:00</updated><title type='text'>All About Grouping at OOW and UKOUG</title><summary type='text'>My plan for 2009 was to try to do a presentation about grouping in SQL at both Oracle OpenWorld and at UKOUG. I submitted abstracts for both conferences. Unfortunately, the session was not selected for Oracle OpenWorld. Not very surprising really, since it is about functionality that was introduced in versions 8 and 9, so I can imagine other subjects are more important for Oracle. A bit later I </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3213708588382353273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/09/all-about-grouping-at-oow-and-ukoug.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3213708588382353273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3213708588382353273'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/09/all-about-grouping-at-oow-and-ukoug.html' title='All About Grouping at OOW and UKOUG'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5801312103232427487</id><published>2009-09-13T16:55:00.000+02:00</published><updated>2009-09-13T16:56:39.520+02:00</updated><title type='text'>Fast refreshable materialized view errors, part seven: a summary</title><summary type='text'>Previous posts:Fast refreshable materialized view errors, part one (basis MV's)Fast refreshable materialized view errors, part two: join MV'sFast refreshable materialized view errors, part three: aggregate MV'sFast refreshable materialized view errors, part four: union all MV'sFast refreshable materialized view errors, part five: nested MV'sFast refreshable materialized view errors, part six: </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5801312103232427487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/09/fast-refreshable-materialized-view_13.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5801312103232427487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5801312103232427487'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/09/fast-refreshable-materialized-view_13.html' title='Fast refreshable materialized view errors, part seven: a summary'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3918385509193518718</id><published>2009-09-13T14:27:00.000+02:00</published><updated>2009-09-13T14:28:17.962+02:00</updated><title type='text'>Fast refreshable materialized view errors, part six: MV_CAPABILITIES_TABLE</title><summary type='text'>After you've been confronted with an error message during the creation of your fast refreshable materialized view, you either know exactly what to do next to resolve the error, or not. If not, the MV_CAPABILITIES_TABLE might help. You can read about it in the documentation here. I remember trying to use it in my project half a year ago and I didn't find it useful. After reading this post, you'll </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3918385509193518718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/09/fast-refreshable-materialized-view.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3918385509193518718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3918385509193518718'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/09/fast-refreshable-materialized-view.html' title='Fast refreshable materialized view errors, part six: MV_CAPABILITIES_TABLE'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3063004930774030641</id><published>2009-08-16T00:54:00.002+02:00</published><updated>2009-08-17T10:03:48.127+02:00</updated><title type='text'>Fast refreshable materialized view errors, part five: nested MV's</title><summary type='text'>Previous post about union all MV'sThe restrictions regarding nested MV's are not in the fast-refreshable part of the documentation, but a little earlier: here.I noticed three restrictions in there:1) All parent and base materialized views must contain joins or aggregates.2) All the underlying objects (materialized views or tables) on which the materialized view is defined must have a materialized</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3063004930774030641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/08/fast-refreshable-materialized-view.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3063004930774030641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3063004930774030641'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/08/fast-refreshable-materialized-view.html' title='Fast refreshable materialized view errors, part five: nested MV&apos;s'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-7449924913396712565</id><published>2009-07-31T23:38:00.000+02:00</published><updated>2009-07-31T23:39:28.292+02:00</updated><title type='text'>Fast refreshable materialized view errors, part four: union all MV's</title><summary type='text'>Previous post about aggregate MV'sThe fourth part will discuss the restrictions and the accompanying error messages of union all MV's. There are only a few restrictions mentioned in the documentation here.Again, I numbered them and edited them a little bit to contain only one restriction per item:1) The defining query must have the UNION ALL operator at the top level.2) Each query block in the </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/7449924913396712565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/07/fast-refreshable-materialized-view.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7449924913396712565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7449924913396712565'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/07/fast-refreshable-materialized-view.html' title='Fast refreshable materialized view errors, part four: union all MV&apos;s'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-6547635682999114129</id><published>2009-06-26T01:08:00.001+02:00</published><updated>2009-06-26T01:10:54.483+02:00</updated><title type='text'>Fast refreshable materialized view errors, part three: aggregate MV's</title><summary type='text'>Previous post about join MV'sIn the third part I'm going to examine all restrictions for aggregate materialized views, as described in the documentation.For convenience of this post, I have numbered and slightly rearranged them to contain one restriction per number:1) All restrictions from "General Restrictions on Fast Refresh".2) All tables in the materialized view must have materialized view </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/6547635682999114129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/06/fast-refreshable-materialized-view.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/6547635682999114129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/6547635682999114129'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/06/fast-refreshable-materialized-view.html' title='Fast refreshable materialized view errors, part three: aggregate MV&apos;s'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-6920313313684671638</id><published>2009-06-05T21:47:00.002+02:00</published><updated>2009-09-13T21:28:35.435+02:00</updated><title type='text'>OTN Forums versus Stack Overflow</title><summary type='text'>A quick intermezzo between the MV error related posts:For almost three years now, I am answering questions on a regular basis at the OTN Discussion Forums, mainly at the SQL and PL/SQL Forum. By reading answers and giving answers, you are not only helping others, but you'll also find you are learning at greater speed than before. Most of the regulars like the forums very much of course, despite </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/6920313313684671638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/06/otn-forums-versus-stack-overflow.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/6920313313684671638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/6920313313684671638'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/06/otn-forums-versus-stack-overflow.html' title='OTN Forums versus Stack Overflow'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8805714023150933388</id><published>2009-05-31T16:50:00.004+02:00</published><updated>2009-06-01T23:10:57.216+02:00</updated><title type='text'>Fast refreshable materialized view errors, part two: join MV's</title><summary type='text'>Previous post about simple MV'sIn this second part I'll start with a fast refreshable join materialized view, based on the emp and dept table:rwijk@ORA11GR1&gt; create table myemp as select * from emp 2  /Table created.rwijk@ORA11GR1&gt; create table mydept as select * from dept 2  /Table created.rwijk@ORA11GR1&gt; alter table myemp add primary key (empno) 2  /Table altered.rwijk@ORA11GR1&gt; alter table </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8805714023150933388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/05/fast-refreshable-materialized-view_31.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8805714023150933388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8805714023150933388'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/05/fast-refreshable-materialized-view_31.html' title='Fast refreshable materialized view errors, part two: join MV&apos;s'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-265306192414999555</id><published>2009-05-30T20:50:00.001+02:00</published><updated>2009-05-31T16:58:39.855+02:00</updated><title type='text'>Fast refreshable materialized view errors, part one</title><summary type='text'>Never put more than one error condition into one error message. It's just so common sense, I didn't even put it in the latest version of Standards and Guidelines for application developers anymore. Maybe wrongly so, because I see violations of this rule a little too often.An example of what I mean: we have a company mail server that requires us to change our passwords every month. And when </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/265306192414999555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/05/fast-refreshable-materialized-view.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/265306192414999555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/265306192414999555'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/05/fast-refreshable-materialized-view.html' title='Fast refreshable materialized view errors, part one'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-840030194334658358</id><published>2009-05-27T20:49:00.002+02:00</published><updated>2009-05-27T22:20:14.843+02:00</updated><title type='text'>Third Planboard DBA Symposium</title><summary type='text'>Yesterday I attended the third version of the Planboard DBA Symposium. Ten presentations were given in two parallel tracks. Some presentations were a little too "hardcore DBA" for me as a simple developer, but still there were several ones I really liked. My highlights were Toon's presentation "APEX for DBA's" and Harald's presentation about SQL Plan Management. Both succeeded in making their </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/840030194334658358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/05/third-planboard-dba-symposium.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/840030194334658358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/840030194334658358'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/05/third-planboard-dba-symposium.html' title='Third Planboard DBA Symposium'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5541374930855614698</id><published>2009-04-09T23:27:00.002+02:00</published><updated>2009-04-09T23:45:00.153+02:00</updated><title type='text'>We have a winner</title><summary type='text'>Well, I'm not the judge and I don't know what other solutions will be sent in, but I guess it's hard to beat this magnificent O(NlogN) solution to the First International NoCOUG SQL Challenge by Alberto Dell'Era, posted here on his website. If you have a statistics or mathematics background, you might actually be able to understand it completely. If not or if you forgot most of it, like me, then </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5541374930855614698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/04/we-have-winner.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5541374930855614698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5541374930855614698'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/04/we-have-winner.html' title='We have a winner'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5579480982875952614</id><published>2009-03-19T22:35:00.003+01:00</published><updated>2011-07-11T21:59:52.202+02:00</updated><title type='text'>Choosing between SQL and PL/SQL</title><summary type='text'>If you prefer to read in German, then you can find a translation here.On my post Calculating probabilities with N throws of a die, I received a comment by Narendra saying:I hope you are not serious about your last statement with some comments I'm sure it's not that hard to maintain....:)But I was serious. However, it's a sentiment I hear a lot: after my presentation Do more with SQL I received </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5579480982875952614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/03/choosing-between-sql-and-plsql.html#comment-form' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5579480982875952614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5579480982875952614'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/03/choosing-between-sql-and-plsql.html' title='Choosing between SQL and PL/SQL'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5319500714966738202</id><published>2009-03-16T00:25:00.003+01:00</published><updated>2009-03-16T00:30:40.172+01:00</updated><title type='text'>The Helsinki Declaration</title><summary type='text'>Toon Koppelaars started blogging "About how database web application development nowadays has gone absolutely and utterly absurd". I cannot agree more. If you want to read why, then you should definitely add this blog to your reader.</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5319500714966738202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/03/helsinki-declaration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5319500714966738202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5319500714966738202'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/03/helsinki-declaration.html' title='The Helsinki Declaration'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-2294658698166618157</id><published>2009-03-09T21:15:00.003+01:00</published><updated>2009-03-09T21:40:19.181+01:00</updated><title type='text'>Presentation about grouping</title><summary type='text'>At May 26 I will be doing a presentation at Planboard's Oracle DBA Symposium. The presentation is about grouping in SQL and more specific about rollups, cubes and grouping sets and how they work on the outside and on the inside.Even though the symposium is aimed at DBA's, I see several interesting presentations for me as a database developer as well. I'm looking forward to those presentations and</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/2294658698166618157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/03/presentation-about-grouping.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2294658698166618157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2294658698166618157'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/03/presentation-about-grouping.html' title='Presentation about grouping'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5949513812390311214</id><published>2009-03-09T20:09:00.003+01:00</published><updated>2011-07-11T21:57:42.468+02:00</updated><title type='text'>Calculating probabilities with N throws of a die</title><summary type='text'>A translation of this post in German can be found here.Chen Shapira pointed me to a SQL riddle by Iggy Fernandez. Laurent Schneider already gave an impressively simple solution using a hierarchical query and the XMLQuery function. I used the SQL model clause (of course) to achieve the same:rwijk@ORA11GR1&gt; select * from die order by face_id  2  /   FACE_ID FACE_VALUE PROBABILITY---------- --------</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5949513812390311214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/03/calculating-probabilities-with-n-throws.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5949513812390311214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5949513812390311214'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/03/calculating-probabilities-with-n-throws.html' title='Calculating probabilities with N throws of a die'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-2640508495342519298</id><published>2009-03-01T23:58:00.004+01:00</published><updated>2009-03-05T00:12:04.096+01:00</updated><title type='text'>Pulling XML out of the database</title><summary type='text'>To have an XMLType variable in your PL/SQL program, and filled with database content, I almost exclusively use the XML publishing functions like XMLAgg, XMLElement and XMLForest. But there are more options. You can use the dbms_xmlgen package for this purpose. And via a colleague who attended an AMIS session by Matthieu de Graaf early this year, I became aware of a third option. The XMLType </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/2640508495342519298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/03/pulling-xml-out-of-database.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2640508495342519298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2640508495342519298'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/03/pulling-xml-out-of-database.html' title='Pulling XML out of the database'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5010938794117136362</id><published>2009-02-10T23:41:00.003+01:00</published><updated>2009-02-11T00:08:07.950+01:00</updated><title type='text'>What's in my JMS queue?</title><summary type='text'>If you have setup a JMS queue with Oracle's Advanced Queuing, a question that pops up regularly is: "What's currently in the queue?". Now that can't be hard - and it isn't - yet I spent a silly amount of time getting it done. Hopefully this blog post will prevent others spending too much time.To setup the JMS queue, create a queue table with payload type sys.aq$_jms_text_message, and a queue in </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5010938794117136362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5010938794117136362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5010938794117136362'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html' title='What&apos;s in my JMS queue?'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-692162724929834662</id><published>2009-02-07T11:53:00.005+01:00</published><updated>2009-02-13T15:46:28.346+01:00</updated><title type='text'>FOR UPDATE SKIP LOCKED</title><summary type='text'>The behaviour of the "for update skip locked" clause is not what I expected it to be. I expected it to try to lock all rows when opening a cursor, just like a regular "for update", and then just skipping the locked rows. Below is a test to show how it works in reality. The setup:A table with three rows:rwijk@ORA11GR1&gt; create table t (id)  2  as  3   select level  4     from dual  5  connect by </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/692162724929834662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/02/for-update-skip-locked.html#comment-form' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/692162724929834662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/692162724929834662'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/02/for-update-skip-locked.html' title='FOR UPDATE SKIP LOCKED'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-2668622419256423168</id><published>2009-01-30T21:05:00.005+01:00</published><updated>2009-01-31T13:51:22.909+01:00</updated><title type='text'>COUNT DISTINCT</title><summary type='text'>This morning I saw an e-mail with the title "SQL puzzle?" in my inbox. That's a good title to make me read that one first. The poster was stunned by the results of the following two queries:SQL&gt; SELECT COUNT(DISTINCT bdl.nrl_id)  2  FROM   a_table bdl  3  WHERE  bdl.periode &gt;= to_date('20081023092701','yyyymmddhh24miss')  4  ;COUNT(DISTINCTBDL.NRL_ID)-------------------------                    </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/2668622419256423168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/01/count-distinct.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2668622419256423168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2668622419256423168'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/01/count-distinct.html' title='COUNT DISTINCT'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-670417468080772826</id><published>2009-01-19T21:00:00.001+01:00</published><updated>2009-01-19T21:00:00.739+01:00</updated><title type='text'>PL/SQL session</title><summary type='text'>Today I gave a session about PL/SQL to colleagues who mostly work with Tibco in our Enterprise Application Integration (EAI) group. They know how to program and they know SQL. The challenge was to cover most of the main features of PL/SQL in a workshop in only 8 hours. The session contained lots of little exercises. Topics were architecture, datatypes, main statements, exception handling, </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/670417468080772826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/01/plsql-session.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/670417468080772826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/670417468080772826'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/01/plsql-session.html' title='PL/SQL session'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3887479728038436125</id><published>2009-01-06T01:17:00.002+01:00</published><updated>2011-07-11T21:54:24.905+02:00</updated><title type='text'>SQL Model Clause tutorial, part three</title><summary type='text'>If you prefer to read in Dutch, then you can read the original article here (page 30-34), and if you prefer to read in German, then you can find a translated version here. Practicalities of the SQL Model ClauseIf developing SQL queries is part of your job, then it is definitely worth knowing the SQL model clause. Once you’ve gotten over the initial fear of the new syntax and learned the basics, </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3887479728038436125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2009/01/sql-model-clause-tutorial-part-three.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3887479728038436125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3887479728038436125'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2009/01/sql-model-clause-tutorial-part-three.html' title='SQL Model Clause tutorial, part three'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5294368758533176695</id><published>2008-12-29T17:32:00.002+01:00</published><updated>2008-12-29T17:42:56.786+01:00</updated><title type='text'>Article in OGh Visie</title><summary type='text'>For all Dutch readers interested in the SQL model clause (I wonder how selective those two predicates are ...): the last part of the SQL Model Clause Tutorial is published in the winter edition 2008 of OGh Visie. The subject is "Practicalities of the SQL Model Clause" and it tries to answer the question for which kind of problems a model clause query is best applied.For all non Dutch readers </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5294368758533176695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/12/article-in-ogh-visie.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5294368758533176695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5294368758533176695'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/12/article-in-ogh-visie.html' title='Article in OGh Visie'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-6954894944654302643</id><published>2008-12-17T12:27:00.000+01:00</published><updated>2008-12-18T00:28:14.126+01:00</updated><title type='text'>Plan a schedule with the SQL model clause</title><summary type='text'>My DBA colleague Ronald Rood asked an interesting question on OTN's SQL and PL/SQL forum. I'll repeat the question here. First the setup of the table:rwijk@ORA11GR1&gt; create table sschedule (  2  item varchar2(10)  3  , days varchar2(30)  4  , fixed_start_time varchar2(5)  5  , minutes number  6  )  7  /Tabel is aangemaakt.rwijk@ORA11GR1&gt; insert into sschedule (item,days, fixed_start_time, minutes</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/6954894944654302643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/12/plan-schedule-with-sql-model-clause.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/6954894944654302643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/6954894944654302643'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/12/plan-schedule-with-sql-model-clause.html' title='Plan a schedule with the SQL model clause'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-6264735398927647227</id><published>2008-12-05T15:44:00.001+01:00</published><updated>2008-12-05T15:46:41.440+01:00</updated><title type='text'>GROUP_ID()</title><summary type='text'>In this AMIS-post, Lucas Jellema was looking for a way to duplicate certain grouping sets for his ADF tree structure. Using ROLLUP this is not completely possible, but with GROUPING SETS it is, as I will show below. It was a small challenge however to distinguish the duplicate sets from each other in the select list and this is where I learned something new.For example, let's start with this </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/6264735398927647227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/12/groupid.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/6264735398927647227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/6264735398927647227'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/12/groupid.html' title='GROUP_ID()'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8933341258550499107</id><published>2008-11-23T00:23:00.001+01:00</published><updated>2008-11-23T00:24:43.879+01:00</updated><title type='text'>executing_packages.sql</title><summary type='text'>In our in-house application we are developing new features and fixing bugs with approximately 40 developers in total. Sometimes the installation of a new version of a database package "hangs" and eventually times out with a ORA-04021: timeout occurred while waiting to lock object". This is caused by another session that is currently executing the same package. When there's no time pressure, the </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8933341258550499107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/11/executingpackagessql.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8933341258550499107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8933341258550499107'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/11/executingpackagessql.html' title='executing_packages.sql'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-9198960136694847743</id><published>2008-11-16T17:33:00.001+01:00</published><updated>2008-11-17T09:36:05.779+01:00</updated><title type='text'>RETURNING INTO</title><summary type='text'>While doing a quality check on new code, I encountered some row by row processing. This always triggers me to make a remark about rewriting the code to a single SQL, or at least bulk processing. But in this case, inside the loop, several local variables were used to do some counting. And at the end of the loop, a processing report was created to inform the end user about how many records had been</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/9198960136694847743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/11/returning-into.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/9198960136694847743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/9198960136694847743'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/11/returning-into.html' title='RETURNING INTO'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8880047480258003701</id><published>2008-11-15T11:50:00.001+01:00</published><updated>2008-11-15T13:14:06.843+01:00</updated><title type='text'>Journaling using flashback data archives - redux</title><summary type='text'>Last year, with version 11.1.0.6, I investigated how useful the new flashback data archive was for implementing journaling on a table in this post. There were two main issues:1) The documented restriction "DDLs that alter the structure of a table (such as drop/modify column, move table, drop partition, truncate table/partition, and add constraint) invalidate any existing undo data for the table. </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8880047480258003701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/11/journaling-using-flashback-data.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8880047480258003701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8880047480258003701'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/11/journaling-using-flashback-data.html' title='Journaling using flashback data archives - redux'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-2119493779456692335</id><published>2008-10-29T22:13:00.000+01:00</published><updated>2008-10-29T22:13:19.656+01:00</updated><title type='text'>Year zero</title><summary type='text'>According to Wikipedia, the year zero does not exist:B.C. (or BC) — Before Christ. Used for years prior to AD 1, counting backwards so the year n BC is the year 1-n AD. Using these two calendar eras as historians use them means that there is no year 0 or negative year numbers.But according to Oracle it does:rwijk@ORA11GR1&gt; select date '0000-01-01' from dual  2  /DATE'0000-01-01'------------------</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/2119493779456692335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/10/year-zero.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2119493779456692335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2119493779456692335'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/10/year-zero.html' title='Year zero'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-4407256252707553878</id><published>2008-10-18T18:31:00.004+02:00</published><updated>2008-10-19T20:33:34.316+02:00</updated><title type='text'>DBA_DEPENDENCY_COLUMNS</title><summary type='text'>In two earlier posts, about 11.1.0.6 oddities and my last one about 11.1.0.7 I mentioned not being able to find the column dependency information used in fine grained dependency tracking in the regular USER_% views of the data dictionary. I still haven't, but on the second post, Toon Koppelaars commented:I did some research in this area a few months ago. The FGDT information is stored in </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/4407256252707553878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/10/dbadependencycolumns.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4407256252707553878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4407256252707553878'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/10/dbadependencycolumns.html' title='DBA_DEPENDENCY_COLUMNS'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-7731015479342974234</id><published>2008-10-15T22:18:00.004+02:00</published><updated>2008-10-15T23:25:14.615+02:00</updated><title type='text'>11.1.0.7</title><summary type='text'>Up until now I had only installed base versions of Oracle, but this weekend I decided to install the 11.1.0.7 patch. It was a rough ride, with some really weird error messages ("DBUA thinks this is a Rerun operation" and asking to remove a file which wasn't there). Developers shouldn't do these kind of things I suppose, especially developers who don't fully read the documentation... After doing </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/7731015479342974234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/10/11107.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7731015479342974234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7731015479342974234'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/10/11107.html' title='11.1.0.7'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-7759560782236508760</id><published>2008-10-14T10:09:00.001+02:00</published><updated>2008-10-14T10:09:34.888+02:00</updated><title type='text'>Oracle ACE</title><summary type='text'>Still in the afterglow of my Oracle OpenWorld experience, I received yet another nice Oracle surprise: an e-mail telling me I'm now an Oracle ACE.You have been chosen based on your significant contribution and activity in the Oracle technical community.  Like your fellow Oracle ACEs, you have demonstrated a proficiency in Oracle technology as well as a willingness to share your knowledge and </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/7759560782236508760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/10/oracle-ace.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7759560782236508760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7759560782236508760'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/10/oracle-ace.html' title='Oracle ACE'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5663416723575728901</id><published>2008-09-28T01:53:00.000+02:00</published><updated>2008-09-28T01:54:20.673+02:00</updated><title type='text'>Oracle OpenWorld, day 5</title><summary type='text'>Thursday morning I decided to switch sessions, Mogens Norgaard's for Tanel Poder's session. I had to queue up, because the room was fully booked, but not everybody showed up, so all people in the line-up could enter the room. I sure was glad I switched, as this was the best session at this conference for me. The title was "Advanced Oracle Troubleshooting: No magic is needed - a systematic </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5663416723575728901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/09/oracle-openworld-day-5.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5663416723575728901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5663416723575728901'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/09/oracle-openworld-day-5.html' title='Oracle OpenWorld, day 5'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5706874390585751603</id><published>2008-09-26T04:27:00.003+02:00</published><updated>2008-09-26T16:01:07.399+02:00</updated><title type='text'>Oracle OpenWorld, day 4</title><summary type='text'>Before going to some sessions I had a walk around the two exhibition halls for the first time. Not very interesting for me: a lot of vendors exhibiting and some game rooms. The demo grounds were more interesting although it was a little bit too busy. I managed to see a preview of SQL Developer's data modeling extension, but more on that later. I was a little disappointed for not seeing a stand </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5706874390585751603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/09/oracle-openworld-day-4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5706874390585751603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5706874390585751603'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/09/oracle-openworld-day-4.html' title='Oracle OpenWorld, day 4'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8997378036610217483</id><published>2008-09-24T06:17:00.002+02:00</published><updated>2008-09-24T08:09:38.036+02:00</updated><title type='text'>Oracle OpenWorld, day 3</title><summary type='text'>Tuesday was very diverse. I missed the 9AM session called "How to hack an Oracle Application Express application", because I wanted to finish my previous blogpost. However, before the third session started, I heard two people behind me talking how great this session was ...So the first session I attended was Tom Kyte's keynote "The best way ...". I'm more a fan of technical sessions than keynotes</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8997378036610217483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/09/oracle-openworld-day-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8997378036610217483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8997378036610217483'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/09/oracle-openworld-day-3.html' title='Oracle OpenWorld, day 3'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3687940374885290458</id><published>2008-09-23T15:37:00.003+02:00</published><updated>2008-09-24T13:49:42.895+02:00</updated><title type='text'>Oracle OpenWorld, day 2</title><summary type='text'>Monday started kind of funny. On Sunday, Chen pointed out an unconference session to me about the SQL and PL/SQL forum, saying semi-seriously "this one is about you". My first regular session started at 11:30 AM, and this one at 11 AM, so I decided to have a look what Greg Pike had to say about the forum. His point was that he was amazed at the speed and the quality of the answers in the SQL and </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3687940374885290458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/09/oracle-openworld-day-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3687940374885290458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3687940374885290458'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/09/oracle-openworld-day-2.html' title='Oracle OpenWorld, day 2'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-1419881429925678393</id><published>2008-09-22T13:30:00.005+02:00</published><updated>2008-09-28T22:15:56.009+02:00</updated><title type='text'>Oracle OpenWorld, day 1</title><summary type='text'>The first day at Oracle OpenWorld 2008 was great. I arrived early at 8.30 AM, although my first session started at 10.00 AM, so I had the time to register, explore the territory and take some photographs. The cable to connect by camera to my laptop is left at home unfortunately. I will put some photographs here when I get back home. My first impressions are that it is a huge and very well </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/1419881429925678393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/09/oracle-openworld-day-1.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1419881429925678393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1419881429925678393'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/09/oracle-openworld-day-1.html' title='Oracle OpenWorld, day 1'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_EElgcElJ00c/SN_j5N9xvDI/AAAAAAAAAFg/BgF7ayA-1pA/s72-c/oow1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-4644648947085635301</id><published>2008-09-13T15:46:00.000+02:00</published><updated>2008-09-13T15:47:32.623+02:00</updated><title type='text'>Implementing change event rules</title><summary type='text'>Previous post in this series: implementing dynamic data constraintsThe CDM classification scheme has divided the change event rules into two categories: change event rules with DML and without DML. Since I have the same advice for both of these categories I am elaborating on them both in the same post.Simple default value rulesThese are implemented declaratively by specifying a default value </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/4644648947085635301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/09/implementing-change-event-rules.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4644648947085635301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4644648947085635301'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/09/implementing-change-event-rules.html' title='Implementing change event rules'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_EElgcElJ00c/SMBOjaWYtMI/AAAAAAAAAEI/1-Kh4Qi8CJ8/s72-c/change_event_rules_586.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8170454555039503888</id><published>2008-09-13T11:08:00.006+02:00</published><updated>2008-09-16T14:05:26.189+02:00</updated><title type='text'>Simulating print_table with grouping sets</title><summary type='text'>Inspired by this OTN post from michaels, I realized I can also do the unpivot query from Simulating print_table with unpivot with just grouping sets functionality. So you won't have to wait until 11g, because grouping sets became available somewhere in the 9i range. The equivalent query is this:rwijk@ORA11GR1&gt; select case  2           when grouping(ename) = 0 then 'ENAME   : ' || ename  3</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8170454555039503888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/09/simulting-printtable-with-grouping-sets.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8170454555039503888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8170454555039503888'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/09/simulting-printtable-with-grouping-sets.html' title='Simulating print_table with grouping sets'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8510995591631320450</id><published>2008-09-11T21:49:00.002+02:00</published><updated>2008-09-11T22:54:31.848+02:00</updated><title type='text'>Preview sessions Oracle OpenWorld</title><summary type='text'>This evening (and late afternoon) AMIS gave 9 speakers a chance to prepare their Oracle OpenWorld sessions for their Dutch peers. Three parallel tracks with three sessions each. You can read the official introduction for these sessions here. I decided to visit the three database oriented sessions, but some other sessions looked interesting as well. I'll check the feedback on those other sessions </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8510995591631320450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/09/preview-sessions-oracle-openworld.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8510995591631320450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8510995591631320450'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/09/preview-sessions-oracle-openworld.html' title='Preview sessions Oracle OpenWorld'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-249592522459842890</id><published>2008-09-07T20:18:00.002+02:00</published><updated>2008-09-07T23:49:20.855+02:00</updated><title type='text'>First birthday</title><summary type='text'>A quick post because this blog is exactly one year old today. In this year, the blog has had 19,227 visits and 24,782 page views. A picture of Google Analytics:Some other facts:The maximum number of visits on one day is 212, on March 6th, due to this blogpost from Jonathan Lewis.Most popular post is Check constraints with sysdate, followed by SQL Model Clause Tutorial, part two and </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/249592522459842890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/09/first-birthday.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/249592522459842890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/249592522459842890'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/09/first-birthday.html' title='First birthday'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-76980171829913429</id><published>2008-09-07T00:12:00.005+02:00</published><updated>2008-09-07T20:17:57.403+02:00</updated><title type='text'>Going to Oracle OpenWorld</title><summary type='text'>Last Friday I finally got approved to visit Oracle OpenWorld as a blogger. It came as a surprise, because I had to wait 5 weeks for the approval. This can be fine if they had said in advance that an approval process can take up to 5 weeks. But without such a notice, it's hard to imagine why judging that a blog is indeed about Oracle and is not brand sparking new, can take that long. During those </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/76980171829913429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/09/going-to-oracle-openworld.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/76980171829913429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/76980171829913429'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/09/going-to-oracle-openworld.html' title='Going to Oracle OpenWorld'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-9115075042786071928</id><published>2008-09-04T21:18:00.003+02:00</published><updated>2008-09-04T22:10:23.288+02:00</updated><title type='text'>Apex training</title><summary type='text'>Just finished a three day APEX training by John Scott and Dimitri Gielis of Apex Evangelists in my home city. It consisted of 10 one-and-a-half-hour presentations, one hands-on session and a quiz. The topics of the 10 presentations were well chosen. No time was wasted by explaining basic stuff. Instead they focused on some lesser known topics you won't necessarily encounter, like AJAX and </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/9115075042786071928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/09/apex-training.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/9115075042786071928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/9115075042786071928'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/09/apex-training.html' title='Apex training'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-2683359873918054581</id><published>2008-08-25T23:27:00.001+02:00</published><updated>2008-09-13T15:50:04.215+02:00</updated><title type='text'>Implementing dynamic data constraints</title><summary type='text'>Previous post: Implementing inter-entity rulesCreate rulesThese rules either originate from a decomposed inter-entity rule or they were invented on their own. Again you have two choices of implementing them: using database triggers or incorporating in your api's. And again it's a matter of whether you are willing to lose performance or not. You'll probably want to be consistent throughout all </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/2683359873918054581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/08/implementing-dynamic-data-constraints.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2683359873918054581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2683359873918054581'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/08/implementing-dynamic-data-constraints.html' title='Implementing dynamic data constraints'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_EElgcElJ00c/SLLzjuga_MI/AAAAAAAAAEA/tJAQRu8E-xM/s72-c/dynamic_data_constraints_586.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-3211851022585337155</id><published>2008-08-21T22:35:00.003+02:00</published><updated>2008-08-25T23:28:53.058+02:00</updated><title type='text'>Implementing inter-entity rules</title><summary type='text'>Previous post in this serie: Implementing entity rules.Relationship rulesRelationship rules are implemented by foreign keys. This seems very straightforward, but there is a little more to it. You might have to add a not null constraint to the foreign key column to implement the optionality of the relationship. Or an extra unique key constraint on the foreign key column to implement a 1:1 </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/3211851022585337155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/08/implementing-inter-entity-rules.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3211851022585337155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/3211851022585337155'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/08/implementing-inter-entity-rules.html' title='Implementing inter-entity rules'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_EElgcElJ00c/SKiLNTUIdTI/AAAAAAAAAD4/JLz9XPf1K3s/s72-c/inter_entity_rules_586.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-7919135935537417564</id><published>2008-08-18T20:38:00.002+02:00</published><updated>2008-08-18T21:02:14.554+02:00</updated><title type='text'>The trouble with triggers</title><summary type='text'>The September/October 2008 issue of Oracle magazine is out. In this issue you'll find an article by Tom Kyte called The Trouble with Triggers. It ties in nicely with the current series in this blog about implementing business rules. And if I wasn't able to convince you that database triggers are evil, I'm sure that Tom will.</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/7919135935537417564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/08/trouble-with-triggers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7919135935537417564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7919135935537417564'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/08/trouble-with-triggers.html' title='The trouble with triggers'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-7427059684731953460</id><published>2008-08-11T22:54:00.003+02:00</published><updated>2008-09-01T22:19:29.182+02:00</updated><title type='text'>Implementing entity rules</title><summary type='text'>Previous post in this serie: Implementing attribute and tuple rulesAttribute rules and tuple rules were fairly easy. The fun part starts with the entity rules and - in a next post - the inter-entity rules. According to the picture above, entity rules come in two flavours: unique identifier rules and other entity rules. However, since the other entity rules can be implemented in two clearly </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/7427059684731953460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/08/implementing-entity-rules.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7427059684731953460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7427059684731953460'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/08/implementing-entity-rules.html' title='Implementing entity rules'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_EElgcElJ00c/SJtuL9ndRWI/AAAAAAAAADw/dqX-2m42518/s72-c/entity_rules_586.JPG' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-5352348318791800785</id><published>2008-08-07T21:16:00.003+02:00</published><updated>2008-08-07T21:45:30.406+02:00</updated><title type='text'>La clause MODEL d'Oracle</title><summary type='text'>Today, Antoine Dinimant (Antoun) has released a translation of my SQL Model Clause Tutorials, part one and part two, on the French developers' community site developpez.com.The official title of the translated version is: "Intégrez un modèle de calcul à vos requêtes SQL : la clause MODEL d'Oracle" and can be seen here. The translated version looks very good and contains some extra notes by Antoun</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/5352348318791800785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/08/la-clause-model-doracle.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5352348318791800785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/5352348318791800785'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/08/la-clause-model-doracle.html' title='La clause MODEL d&apos;Oracle'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-2756180454729585919</id><published>2008-08-01T23:02:00.004+02:00</published><updated>2008-08-11T22:58:19.179+02:00</updated><title type='text'>Implementing attribute and tuple rules</title><summary type='text'>Previous post: Implementing business rulesThe first of the five main classes of business rules according to CDM RuleFrame's classification scheme is the class "Static Data Constraint Rules". Each rule describes a state the data must always adhere to. By having them in place - and having them properly implemented of course - your data integrity is ensured. Static data constraints have 4 subclasses</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/2756180454729585919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/08/implementing-attribute-and-tuple-rules.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2756180454729585919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2756180454729585919'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/08/implementing-attribute-and-tuple-rules.html' title='Implementing attribute and tuple rules'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_EElgcElJ00c/SJN5-5Owf7I/AAAAAAAAADg/wJ2JCUHpZQs/s72-c/attribute_rules_600.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8549105395918526239</id><published>2008-07-30T21:54:00.018+02:00</published><updated>2011-02-17T11:09:02.331+01:00</updated><title type='text'>Implementing business rules</title><summary type='text'>This is the first post about implementing business rules in an Oracle database. In the previous millenium I've implemented them a lot using CDM RuleFrame and its business rule classification scheme. This was all done using Oracle7. And business rules were either implemented using check constraints or, most of the time, using database triggers. Since then, a lot has changed, which have changed my </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8549105395918526239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/07/implementing-business-rules.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8549105395918526239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8549105395918526239'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/07/implementing-business-rules.html' title='Implementing business rules'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/rwijk72/SJDVV0o8TcI/AAAAAAAAACQ/JVyBfMqP-sQ/s72-c/static_data_constraints.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-4653592527118628172</id><published>2008-07-24T22:35:00.002+02:00</published><updated>2008-07-24T23:16:48.313+02:00</updated><title type='text'>SYSDATE@!</title><summary type='text'>If you use SYSDATE or SYSTIMESTAMP multiple times in a query that takes some time, will you see different times?No, because queries are read consistent: they see the data as of the timestamp the query began. So SYSDATE and SYSTIMESTAMP will produce the date and timestamp at the time the query begins, right? You can see this in this little test:rwijk@ORA11G&gt; select sysdate  2       , systimestamp</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/4653592527118628172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/07/sysdate.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4653592527118628172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/4653592527118628172'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/07/sysdate.html' title='SYSDATE@!'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-2794123838154016778</id><published>2008-07-19T12:04:00.004+02:00</published><updated>2008-07-21T22:47:01.205+02:00</updated><title type='text'>Scalability of dbms_lock.request</title><summary type='text'>For some time now, I have recommended to use dbms_lock.request when implementing business rules correctly. In short, the idea behind it is to serialize access when validating some entity rule when the rows belong to the same parent record. For example, think of a business rule that checks for an overlap of periods. An alternative for dbms_lock.request is to physically lock the parent row. But </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/2794123838154016778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/07/scalability-of-dbmslockrequest.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2794123838154016778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2794123838154016778'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/07/scalability-of-dbmslockrequest.html' title='Scalability of dbms_lock.request'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8824755635157828046</id><published>2008-07-11T22:47:00.003+02:00</published><updated>2008-07-11T23:49:22.667+02:00</updated><title type='text'>A new blog and a new book</title><summary type='text'>Just noticed that Christian Antognini started blogging a couple of weeks ago. I added the blog to my reader, hoping for more interesting posts like this one. Christian's book Troubleshooting Oracle Performance is available now. I'm impressed with the table of contents alone and so the book is on my wish list now. The book also has two forewords written by Cary Millsap and Jonathan Lewis that can </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8824755635157828046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/07/new-blog-and-new-book.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8824755635157828046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8824755635157828046'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/07/new-blog-and-new-book.html' title='A new blog and a new book'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-1033818819101229421</id><published>2008-06-09T23:32:00.005+02:00</published><updated>2008-08-25T01:21:08.097+02:00</updated><title type='text'>Do more with SQL</title><summary type='text'>Today I will give an in-house knowledge session called "Do more with SQL". I want to share my knowledge about this topic, because many times I see procedural code being written where one or a few single SQL statements would have been sufficient. And not only sufficient, but much shorter, more readable and faster as well. I hope to raise awareness among my colleagues for this problem. And if this </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/1033818819101229421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/06/do-more-with-sql.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1033818819101229421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1033818819101229421'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/06/do-more-with-sql.html' title='Do more with SQL'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-8283131367403360754</id><published>2008-05-30T20:36:00.005+02:00</published><updated>2008-06-02T10:21:30.345+02:00</updated><title type='text'>String aggregation with the model clause</title><summary type='text'>There are lots of ways to do string aggregation. My favourite one is by using the model clause. Although you have to be aware of the increased PGA memory consumption. This can be a problem when you plan to use the query in multi user applications. A rare case if you ask me. It can also be a problem when a single session doesn't have enough PGA memory available. In the latter case it will read and</summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/8283131367403360754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/05/string-aggregation-with-model-clause.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8283131367403360754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/8283131367403360754'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/05/string-aggregation-with-model-clause.html' title='String aggregation with the model clause'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-7728967955385488222</id><published>2008-05-19T20:48:00.003+02:00</published><updated>2008-05-19T21:19:59.370+02:00</updated><title type='text'>RuleGen: the test</title><summary type='text'>In a earlier blogpost of mine, I talked about Toon Koppelaars' new product called RuleGen. I promised to do some testing about the performance:However the trigger code itself seems to be relatively lightweight - I'll have to test this. And more important, multirow DML is capable of checking the rule only once instead of "for each row". Undoubtedly RuleGen will outperform CDM RuleFrame. In the </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/7728967955385488222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/05/rulegen-test.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7728967955385488222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7728967955385488222'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/05/rulegen-test.html' title='RuleGen: the test'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-1584441575061345572</id><published>2008-04-28T15:03:00.002+02:00</published><updated>2008-04-28T17:23:09.521+02:00</updated><title type='text'>Deterministic clause</title><summary type='text'>In my previous Fancy Code blog entry, I received a comment from Rick saying:Maybe the original author specified DETERMINSTIC so that the function wouldn't have to logically derive the return value if/whenever it was called again with the same parameter value. Since it could just return previously calculated results, then maybe he could save a fraction of a second of CPU time within a year or two </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/1584441575061345572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/04/deterministic-clause.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1584441575061345572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/1584441575061345572'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/04/deterministic-clause.html' title='Deterministic clause'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-7522889905924799693</id><published>2008-04-17T21:54:00.002+02:00</published><updated>2008-04-17T22:25:07.799+02:00</updated><title type='text'>ORA-01401, ORA-12899 and ORA-01438</title><summary type='text'>My customer recently upgraded some of its databases from Oracle 9.2.0.7 to 10.2.0.3, so when my colleague and me saw error message ORA-12899 after an insert statement, it came as a surprise. But it was a pleasant surprise.In 9.2.0.7 we were used to see a ORA-01401 in the situation where you'd insert a varchar2 value that doesn't fit into a column because it's length is too big. And to its </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/7522889905924799693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/04/ora-01401-ora-12899-and-ora-01438.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7522889905924799693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/7522889905924799693'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/04/ora-01401-ora-12899-and-ora-01438.html' title='ORA-01401, ORA-12899 and ORA-01438'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-6322935760223222390</id><published>2008-04-14T20:57:00.003+02:00</published><updated>2008-04-14T22:06:04.323+02:00</updated><title type='text'>Fancy code</title><summary type='text'>I was reminded about this blog's motto when I watched a piece of production code last week. It was located as a subfunction at the end of the declaration section of a monster procedure containing 1500 lines. At least some form of modularization has kicked in, was my first thought after seeing the smallish function. This thought was immediately followed by a "and quite a clear name too". Then I </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/6322935760223222390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/04/fancy-code.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/6322935760223222390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/6322935760223222390'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/04/fancy-code.html' title='Fancy code'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-334984828915870519</id><published>2008-04-13T10:17:00.002+02:00</published><updated>2008-04-13T22:56:15.976+02:00</updated><title type='text'>Graham Wood customer meeting</title><summary type='text'>Last Thursday, my customer got the chance to have a customer account meeting with Graham Wood at Oracle Netherlands. Normally this would be a DBA affair, but luckily my customer thought it was a good idea  to have two developers join the three DBA's. And I was one of the lucky two developers, since I get to solve quite a lot of performance problems, that are spotted by our DBA's.As a developer I </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/334984828915870519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/04/graham-wood-customer-meeting.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/334984828915870519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/334984828915870519'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/04/graham-wood-customer-meeting.html' title='Graham Wood customer meeting'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7395977411859619892.post-2772345083795527020</id><published>2008-04-08T00:10:00.002+02:00</published><updated>2008-04-08T00:16:07.566+02:00</updated><title type='text'>Multiple query read consistency</title><summary type='text'>Nothing new and shiny this time, but a write up about an aspect of one of the cornerstones of Oracle: read consistency. The concepts manual has a very good chapter about this topic called Data Concurrency and Consistency. A project I was auditing had to select data from multiple tables and interface that data to another system. So I adviced the developers to make sure all the queries would query </summary><link rel='replies' type='application/atom+xml' href='http://rwijk.blogspot.com/feeds/2772345083795527020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rwijk.blogspot.com/2008/04/multiple-query-read-consistency_08.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2772345083795527020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7395977411859619892/posts/default/2772345083795527020'/><link rel='alternate' type='text/html' href='http://rwijk.blogspot.com/2008/04/multiple-query-read-consistency_08.html' title='Multiple query read consistency'/><author><name>Rob van Wijk</name><uri>http://www.blogger.com/profile/00499478359372903250</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
