<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-8884584404576003487</id><updated>2008-08-08T12:41:15.960-04:00</updated><title type="text">ORACLENERD</title><link rel="alternate" type="text/html" href="http://www.oraclenerd.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default?start-index=26&amp;max-results=25" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>116</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/oraclenerd/RahJ" type="application/atom+xml" /><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-6908710323616056020</id><published>2008-08-07T22:17:00.003-04:00</published><updated>2008-08-07T22:27:31.913-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="funny" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><title type="text">iPhone AppStore oops?</title><content type="html">My wife has an iPhone (I have the $10 phone I got with my 2 year plan).  I love the thing.  I steal it whenever I can.&lt;br /&gt;&lt;br /&gt;One of my favorite things to do though is to ask her a random question, you know, one that would take 3 seconds to google and find the answer, just to test her.  Usually, she just says "I don't know"&lt;br /&gt;&lt;br /&gt;Um...you have an iPhone...and you can look it up right?  (lots of sarcasm)&lt;br /&gt;&lt;br /&gt;Oh yeah.&lt;br /&gt;&lt;br /&gt;I probably do it because I have the $10 phone and I'm jealous.&lt;br /&gt;&lt;br /&gt;Anyway, she showed me a screen shot yesterday of an app in the AppStore that was selling for $999.99.  Funny.  What do you get?  A pretty picture.  What else?  Nothing.&lt;br /&gt;&lt;br /&gt;So, via &lt;a href="http://oracleappslab.com/author/jakekuramoto/"&gt;Jake&lt;/a&gt; then &lt;a href="http://digg.com/apple/This_Guy_Actually_Bought_I_Am_Rich_App_for_999_99"&gt;Digg&lt;/a&gt;, I found the following picture:&lt;br /&gt;&lt;br /&gt;&lt;img src="/images/iphone_oops.png" /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=t2Povj"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=t2Povj" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/359018871/iphone-appstore-oops.html" title="iPhone AppStore oops?" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=6908710323616056020" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/6908710323616056020" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/6908710323616056020" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/08/iphone-appstore-oops.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-8780577278583098610</id><published>2008-08-06T16:49:00.003-04:00</published><updated>2008-08-06T16:51:58.566-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="work" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Oracle Jobs in Doral (Miami), FL</title><content type="html">Trying to help someone out.  Wife won't leave (permanently) to Miami, so I'm out of the running.  Number of positions on the left, short position description on the right.&lt;br /&gt;&lt;br /&gt;Contact me either through comments or email (chet.justice at gmail) and I'll give you the contact information of the recruiter.&lt;br /&gt;&lt;br /&gt;1 Oracle Fin Apps 11i Financials Functional need (core modules)&lt;br /&gt;&lt;br /&gt;6 Oracle PL/SQL Developer needs w/ FinApps experience&lt;br /&gt;&lt;br /&gt;2 Lead PL/SQL Developer needs w/FinApps&lt;br /&gt;&lt;br /&gt;4 Oracle Reports 6i Developer needs&lt;br /&gt;&lt;br /&gt;2 Lead Oracle Reports 6i Developer needs&lt;br /&gt;&lt;br /&gt;2 Oracle Discoverer needs
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=ZKbk9d"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=ZKbk9d" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/357761861/oracle-jobs-in-doral-miami-fl.html" title="Oracle Jobs in Doral (Miami), FL" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=8780577278583098610" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/8780577278583098610" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/8780577278583098610" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/08/oracle-jobs-in-doral-miami-fl.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-1845045211236175847</id><published>2008-08-04T21:50:00.006-04:00</published><updated>2008-08-04T22:25:04.490-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="web2.0" /><category scheme="http://www.blogger.com/atom/ns#" term="work" /><title type="text">How to Find a Job</title><content type="html">My job search is going.  I had an interview last Friday and I have a follow-up tomorrow.  I've got a few other leads, but nothing as concrete.  &lt;br /&gt;&lt;br /&gt;Last time I "lost" my job, I was prepared and was working within a week.  I've been able to explore different ways to search for jobs this time as I was taken by surprise.&lt;br /&gt;&lt;br /&gt;Here's a rundown of how I'm currently looking for work:&lt;br /&gt;1.  &lt;a href="http://search.twitter.com/search?q=oracle"&gt;Twitter&lt;/a&gt; - &lt;a href="http://oracleappslab.com/author/jakekuramoto/"&gt;Jake&lt;/a&gt; over at &lt;a href="http://oracleappslab.com/"&gt;AppsLab&lt;/a&gt; suggested creating a feed on the "oracle" keyword.  Sure enough, I've seen 5 or 6 job postings.&lt;br /&gt;2.  &lt;a href="http://www.linkedin.com"&gt;LinkedIn&lt;/a&gt; - Trolling my connections and others (again, suggested by Jake)&lt;br /&gt;3.  &lt;a href="http://www.oraclenerd.com"&gt;ORACLENERD&lt;/a&gt; - Nothing's come of this one, but I'm hopeful that someday in the future it will work for me.  At the very least, it gives prospective employers insight into my thinking.&lt;br /&gt;4.  &lt;a href="http://www.craigslist.com"&gt;craigslist&lt;/a&gt; - I've found 2 or 3 jobs postings through here.&lt;br /&gt;5.  Friends - I've been fortunate to meet a lot of people in the Tampa Bay area.  Despite my firing I've still got a decent reputation around town.&lt;br /&gt;6.  &lt;a href="http://www.careerbuilder.com"&gt;CareerBuilder&lt;/a&gt; - Goes without saying.&lt;br /&gt;7.  &lt;a href="http://www.monster.com"&gt;Monster&lt;/a&gt; - Still works.&lt;br /&gt;&lt;br /&gt;One thing I have noticed is that my hits go way up when I lose my job.  I'll accept a low hit count if it means I can keep my job!&lt;br /&gt;&lt;br /&gt;Special thanks go to &lt;a href="http://www.oraclerant.com"&gt;Tom&lt;/a&gt;, &lt;a href="http://oracleappslab.com/author/jakekuramoto/"&gt;Jake&lt;/a&gt;, &lt;a href="http://it.toolbox.com/blogs/oracle-guide"&gt;LewisC&lt;/a&gt;, Frank, Dodd, and Ray.  If I left you off, it wasn't on purpose...there's just been so much going on.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=Lwu5j4"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=Lwu5j4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/355924943/how-to-find-job.html" title="How to Find a Job" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=1845045211236175847" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/1845045211236175847" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/1845045211236175847" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/08/how-to-find-job.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-8397800703122781142</id><published>2008-07-31T23:15:00.003-04:00</published><updated>2008-07-31T23:20:55.285-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sql" /><category scheme="http://www.blogger.com/atom/ns#" term="ideas" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle mix" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Oracle Mix:  Two Ideas</title><content type="html">I've added two ideas at &lt;a href="http://mix.oracle.com"&gt;Oracle Mix&lt;/a&gt;.  The first one is &lt;a href="https://mix.oracle.com/ideas/42738-utl_file-has-the-ability-to-read-the-contents-of-a-directory"&gt;UTL_FILE has the ability to read the contents of a directory&lt;/a&gt; and the second one is &lt;a href="https://mix.oracle.com/ideas/42753-add-a-pseudo-column-that-stores-the-date-the-record-was-inserted-or-updated"&gt;Add a pseudo-column that stores the date the record was INSERTed or UPDATEd&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I mentioned the &lt;a href="http://www.oraclenerd.com/2008/07/pseudo-column-rowdate.html"&gt;second one before&lt;/a&gt;.  The &lt;a href="http://www.iloveplsqland.net/pls/apex/f?p=210:16:5700212350708912::NO::P16_CAMPAIGN_ID,P16_PERSON_ID:62%2C&amp;cs=1E19AB2E016331FD98B99FB8702462F36"&gt;first one&lt;/a&gt; I've seen on the iloveplsqland.net site.  So go and vote (or don't, but leave your comments).
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=kn8HYq"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=kn8HYq" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/352212195/oracle-mix-two-ideas.html" title="Oracle Mix:  Two Ideas" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=8397800703122781142" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/8397800703122781142" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/8397800703122781142" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/oracle-mix-two-ideas.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-7841613735881958328</id><published>2008-07-31T17:15:00.003-04:00</published><updated>2008-07-31T23:25:07.772-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sql" /><category scheme="http://www.blogger.com/atom/ns#" term="11g" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><title type="text">11g New Feature:  PIVOT</title><content type="html">I do have an interview tomorrow.  Woohoo!&lt;br /&gt;&lt;br /&gt;So my go at the PIVOT operator, "new" in 11g.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_10002.htm#CHDFAFIE"&gt;pivot_clause&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28313/analysis.htm#DWHSG0209"&gt;Datawarehouse Guide&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_10002.htm#CHDFIIDD"&gt;SQL Reference Examples&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/pub/articles/oracle-database-11g-top-features/11g-pivot.html"&gt;Arup Nanda's Example&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My example.&lt;br /&gt;&lt;br /&gt;Let's create some data first:&lt;pre class="code"&gt;&lt;br /&gt;CREATE TABLE transaction_types&lt;br /&gt;(&lt;br /&gt;  transactiontypecode VARCHAR2(10)&lt;br /&gt;    CONSTRAINT pk_transactiontypecode PRIMARY KEY&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;INSERT INTO transaction_types( transactiontypecode )&lt;br /&gt;VALUES ( 'DEBIT' );&lt;br /&gt;INSERT INTO transaction_types( transactiontypecode )&lt;br /&gt;VALUES ( 'CREDIT' );&lt;br /&gt;&lt;br /&gt;CREATE TABLE transactions&lt;br /&gt;(&lt;br /&gt;  id NUMBER(10)&lt;br /&gt;    CONSTRAINT pk_id PRIMARY KEY,&lt;br /&gt;  transactiontypecode&lt;br /&gt;    CONSTRAINT fk_ttcode_transactions REFERENCES transaction_types( transactiontypecode )&lt;br /&gt;    CONSTRAINT nn_ttcode_transactions NOT NULL,&lt;br /&gt;  amount NUMBER(16,2)&lt;br /&gt;    CONSTRAINT nn_amount_trans NOT NULL&lt;br /&gt;    CONSTRAINT ck_amount_trans CHECK ( amount &gt;= 0 ),&lt;br /&gt;  date_created DATE DEFAULT SYSDATE&lt;br /&gt;    CONSTRAINT nn_datecreated_trans NOT NULL&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;INSERT INTO transactions&lt;br /&gt;  ( id,&lt;br /&gt;    transactiontypecode,&lt;br /&gt;    amount )&lt;br /&gt;VALUES&lt;br /&gt;  ( 1,&lt;br /&gt;    'DEBIT',&lt;br /&gt;    44.44 );&lt;br /&gt;&lt;br /&gt;INSERT INTO transactions&lt;br /&gt;  ( id,&lt;br /&gt;    transactiontypecode,&lt;br /&gt;    amount )&lt;br /&gt;VALUES&lt;br /&gt;  ( 2,&lt;br /&gt;    'DEBIT',&lt;br /&gt;    20.34 );&lt;br /&gt;&lt;br /&gt;INSERT INTO transactions&lt;br /&gt;  ( id,&lt;br /&gt;    transactiontypecode,&lt;br /&gt;    amount )&lt;br /&gt;VALUES&lt;br /&gt;  ( 3,&lt;br /&gt;    'CREDIT',&lt;br /&gt;    5.60 );&lt;br /&gt;&lt;br /&gt;INSERT INTO transactions&lt;br /&gt;  ( id,&lt;br /&gt;    transactiontypecode,&lt;br /&gt;    amount )&lt;br /&gt;VALUES&lt;br /&gt;  ( 4,&lt;br /&gt;    'DEBIT',&lt;br /&gt;    67 );&lt;br /&gt;&lt;br /&gt;INSERT INTO transactions&lt;br /&gt;  ( id,&lt;br /&gt;    transactiontypecode,&lt;br /&gt;    amount )&lt;br /&gt;VALUES&lt;br /&gt;  ( 5,&lt;br /&gt;    'DEBIT',&lt;br /&gt;    234.55 );&lt;br /&gt;&lt;br /&gt;INSERT INTO transactions&lt;br /&gt;  ( id,&lt;br /&gt;    transactiontypecode,&lt;br /&gt;    amount )&lt;br /&gt;VALUES&lt;br /&gt;  ( 6,&lt;br /&gt;    'CREDIT',&lt;br /&gt;    76.55 );&lt;br /&gt;&lt;br /&gt;INSERT INTO transactions&lt;br /&gt;  ( id,&lt;br /&gt;    transactiontypecode,&lt;br /&gt;    amount )&lt;br /&gt;VALUES&lt;br /&gt;  ( 7,&lt;br /&gt;    'DEBIT',&lt;br /&gt;    3.45 );&lt;/pre&gt;So what's the big deal with PIVOT?  I'm not sure yet other than it's something new and new is cool.&lt;br /&gt;&lt;br /&gt;Basically, PIVOT allows you to pivot rows into columns.  We often do this for reports we generate.  Here's the old way:&lt;pre class="code"&gt;&lt;br /&gt;SELECT&lt;br /&gt;  TRUNC( date_created ) date_created,&lt;br /&gt;  SUM( CASE&lt;br /&gt;        WHEN transactiontypecode = 'DEBIT' THEN&lt;br /&gt;          amount&lt;br /&gt;       END ) debit_amount,&lt;br /&gt;  SUM( CASE&lt;br /&gt;        WHEN transactiontypecode = 'CREDIT' THEN&lt;br /&gt;          amount&lt;br /&gt;       END ) credit_amount&lt;br /&gt;FROM transactions&lt;br /&gt;GROUP BY &lt;br /&gt;  TRUNC( date_created )&lt;br /&gt;ORDER BY date_created;&lt;br /&gt;&lt;br /&gt;DATE_CREA DEBIT_AMOUNT CREDIT_AMOUNT&lt;br /&gt;--------- ------------ -------------&lt;br /&gt;31-JUL-08       369.78         82.15&lt;br /&gt;&lt;/pre&gt;Really, not that bad.  But if I want to do COUNT and AVG, I have to create more CASE statements like the ones above.  My query will go from 14 lines to 30 in a hurry.&lt;br /&gt;&lt;br /&gt;Here's the new cool way:&lt;pre class="code"&gt;&lt;br /&gt;SELECT *&lt;br /&gt;FROM&lt;br /&gt;  (&lt;br /&gt;    SELECT &lt;br /&gt;      transactiontypecode tt,&lt;br /&gt;      TRUNC( date_created ) date_created,&lt;br /&gt;      amount &lt;br /&gt;    FROM transactions&lt;br /&gt;  )&lt;br /&gt;PIVOT&lt;br /&gt;(&lt;br /&gt;  SUM( amount ) total_amount&lt;br /&gt;  FOR tt IN ( 'DEBIT' AS "DEBIT", 'CREDIT' AS "CREDIT" )&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;DATE_CREA DEBIT_TOTAL_AMOUNT CREDIT_TOTAL_AMOUNT&lt;br /&gt;--------- ------------------ -------------------&lt;br /&gt;31-JUL-08             369.78               82.15&lt;br /&gt;&lt;/pre&gt;It happens that is 14 rows as well.  Now I'll add AVG and COUNT:&lt;pre class="code"&gt;SELECT *&lt;br /&gt;FROM&lt;br /&gt;  (&lt;br /&gt;    SELECT &lt;br /&gt;      transactiontypecode tt,&lt;br /&gt;      TRUNC( date_created ) date_created,&lt;br /&gt;      amount &lt;br /&gt;    FROM transactions&lt;br /&gt;  )&lt;br /&gt;PIVOT&lt;br /&gt;(&lt;br /&gt;  SUM( amount ) total_amount,&lt;br /&gt;  COUNT( amount ) total_count,&lt;br /&gt;  AVG( amount ) avg_amount&lt;br /&gt;  FOR tt IN ( 'DEBIT' AS "DEBIT", 'CREDIT' AS "CREDIT" )&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;DATE_CREA      D_AMT      D_CNT      D_AVG      C_AMT      C_CNT      C_AVG&lt;br /&gt;--------- ---------- ---------- ---------- ---------- ---------- ----------&lt;br /&gt;31-JUL-08     369.78          5     73.956      82.15          2     41.075&lt;br /&gt;&lt;/pre&gt;Nice!  Sixteen lines of SQL...not bad at all.  That should make code a bit more readable (it'll fit on a single page)...I like it!
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=5h3NbR"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=5h3NbR" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/351964123/11g-new-feature-pivot.html" title="11g New Feature:  PIVOT" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=7841613735881958328" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/7841613735881958328" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/7841613735881958328" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/11g-new-feature-pivot.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-3659445509368731480</id><published>2008-07-31T11:35:00.002-04:00</published><updated>2008-07-31T11:38:12.063-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="utilities" /><title type="text">wordle</title><content type="html">&lt;a href="http://wordle.net/"&gt;Cool stuff.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My del.ico.us cloud.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wordle.net/gallery/wrdl/98676/chet.justice" title="Wordle: chet.justice"&gt;&lt;img src="http://wordle.net/thumb/wrdl/98676/chet.justice" style="padding:4px;border:1px solid #ddd"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Do you think I need a job? ;)
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=C7vx7Q"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=C7vx7Q" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/351677863/wordle.html" title="wordle" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=3659445509368731480" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/3659445509368731480" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/3659445509368731480" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/wordle.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-4096515143564854574</id><published>2008-07-31T11:27:00.001-04:00</published><updated>2008-07-31T11:55:57.553-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="work" /><category scheme="http://www.blogger.com/atom/ns#" term="funny" /><title type="text">I Found a New Job!</title><content type="html">&lt;a href="http://www.foxnews.com/story/0,2933,395181,00.html"&gt;http://www.foxnews.com/story/0,2933,395181,00.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My wife thinks I'm perfect for it!
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=6RGTyC"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=6RGTyC" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/351677864/i-found-new-job.html" title="I Found a New Job!" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=4096515143564854574" title="4 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/4096515143564854574" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/4096515143564854574" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/i-found-new-job.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-5694231017193171399</id><published>2008-07-30T19:08:00.004-04:00</published><updated>2008-07-30T19:28:28.663-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="11g" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">11g New Feature:  Virtual Columns</title><content type="html">Not really so new as it's more than a year old...but I've finally had the opportunity to check it out.  Well, opportunity at my last job which ended on Monday, but since I have so much free time now, I figured I give it a run.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://http://www.oracle.com/pls/db111/search?remark=quick_search&amp;word=VIRTUAL+COLUMN&amp;partno="&gt;Virtual Columns&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Defined in the New Features doc as:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Virtual columns are defined by evaluating an expression the results of which become the metadata of the columns for tables. Virtual columns can be defined at table creation or modification time.&lt;br /&gt;&lt;br /&gt;Virtual columns enable application developers to define computations and transformations as the column (metadata) definition of tables without space consumption. This makes application development easier and less error-prone, as well as enhances query optimization by providing additional statistics to the optimizer for these virtual columns.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So what's it good for?&lt;br /&gt;&lt;br /&gt;One thing that I see is that any derived column or expression can be placed at the table level (and indexed too!).  This as opposed to putting it in a view and taking the chance that the logic is repeated exactly in every location.&lt;br /&gt;&lt;br /&gt;So here goes my example:&lt;pre CLASS="CODE"&gt;&lt;br /&gt;CREATE TABLE virtual_columns&lt;br /&gt;(&lt;br /&gt;  id NUMBER&lt;br /&gt;    CONSTRAINT pk_id PRIMARY KEY,&lt;br /&gt;  first_name VARCHAR2(30),&lt;br /&gt;  middle_name VARCHAR2(20),&lt;br /&gt;  last_name VARCHAR2(40),&lt;br /&gt;  full_name AS&lt;br /&gt;  ( CASE&lt;br /&gt;      WHEN middle_name IS NULL THEN&lt;br /&gt;        first_name || ' ' || last_name&lt;br /&gt;      WHEN middle_name IS NOT NULL THEN&lt;br /&gt;        first_name || ' ' || middle_name || ' ' || last_name&lt;br /&gt;    END ) VIRTUAL&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;INSERT INTO virtual_columns&lt;br /&gt;  ( id,&lt;br /&gt;    first_name,&lt;br /&gt;    middle_name,&lt;br /&gt;    last_name )&lt;br /&gt;VALUES&lt;br /&gt;  ( 1,&lt;br /&gt;    'CHET',&lt;br /&gt;    NULL,&lt;br /&gt;    'JUSTICE' );&lt;br /&gt;&lt;br /&gt;INSERT INTO virtual_columns&lt;br /&gt;  ( id,&lt;br /&gt;    first_name,&lt;br /&gt;    middle_name,&lt;br /&gt;    last_name )&lt;br /&gt;VALUES&lt;br /&gt;  ( 2,&lt;br /&gt;    'MICKEY',&lt;br /&gt;    'CARL',&lt;br /&gt;    'MOUSE' );&lt;br /&gt;&lt;br /&gt;CJUSTICE@&gt;SELECT * FROM virtual_columns;&lt;br /&gt;&lt;br /&gt;        ID FIRST_NAME MIDD LAST_NAME  FULL_NAME&lt;br /&gt;---------- ---------- ---- ---------- ------------------------------&lt;br /&gt;         1 CHET            JUSTICE    CHET JUSTICE&lt;br /&gt;         2 MICKEY     CARL MOUSE      MICKEY CARL MOUSE&lt;br /&gt;&lt;br /&gt;2 rows selected.&lt;/pre&gt;Very cool stuff indeed!  One thing that might be an issue is that if someone does a SELECT * from a table without any filters.  If the expression is complex (SQL --&gt; PL/SQL context switching), it might slow it down.  Of course I have no evidence to back this up yet...just pondering.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=0BnlOD"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=0BnlOD" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/350965204/11g-new-feature-virtual-columns.html" title="11g New Feature:  Virtual Columns" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=5694231017193171399" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/5694231017193171399" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/5694231017193171399" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/11g-new-feature-virtual-columns.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-952226645999989871</id><published>2008-07-29T22:08:00.013-04:00</published><updated>2008-07-30T08:33:50.208-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title type="text">Design:  The Entity?</title><content type="html">Last month, I &lt;a href="http://www.oraclenerd.com/2008/06/design-entity.html"&gt;posted&lt;/a&gt; my preference &lt;br /&gt;for maintaining addresses (and other entity attributes) via an ENTITY table.  I got some good feedback, but I would like more.&lt;br /&gt;&lt;h3&gt;Option 1&lt;/h3&gt;&lt;br /&gt;&lt;img src="http://www.oraclenerd.com/images/the_entity.gif" /&gt;&lt;br /&gt;&lt;h3&gt;Option 2&lt;/h3&gt;&lt;br /&gt;&lt;img src="http://www.oraclenerd.com/images/people_organization_address.gif" /&gt;&lt;br /&gt;&lt;br /&gt;In short, I prefer Option 1 as it requires no further modifications (if adding another entity) and you won't have to write funky SQL to get all the addresses (though you would have to UNION the people and organizations table and any subsequent entity).  The one bad thing perhaps is that you would have to keep a close eye on your code to prevent someone from subverting your process...I think anyway.&lt;br /&gt;&lt;br /&gt;So please vote and sound off in comments as to the "Why" of your choice.&lt;br /&gt;&lt;br /&gt;&lt;iframe allowTransparency="true" frameborder="0" align="center" src="http://www.toluna.com/DisplayCustPoll.aspx?PollID=81775" width="250" height="180" scrolling="no"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;div style="text-align:center;width:250px;"&gt;&lt;br /&gt;&lt;a href="http://www.toluna.com" target="_blank" title="Create polls and vote for free. dPolls.com"&gt;&lt;br /&gt;&lt;img src="http://www.toluna.com/dPollsLink.aspx" border="0" alt="Create polls and vote for free. dPolls.com"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;(If you choose neither, please, please, please explain!)
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=vgkZFP"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=vgkZFP" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/350066180/design-entity.html" title="Design:  The Entity?" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=952226645999989871" title="10 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/952226645999989871" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/952226645999989871" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/design-entity.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-961892245428743330</id><published>2008-07-29T14:34:00.002-04:00</published><updated>2008-07-29T14:39:15.536-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="work" /><category scheme="http://www.blogger.com/atom/ns#" term="funny" /><title type="text">Don't Go Into the Office</title><content type="html">Whenever my boss asks me to come with him...I will politely tell him I'm not going.&lt;br /&gt;&lt;br /&gt;I was laid off yesterday.&lt;br /&gt;&lt;br /&gt;I want to see how many jobs I can have in one years time apparently.  I didn't undermine myself this time though.&lt;br /&gt;&lt;br /&gt;So if you know of anything in the Tampa Bay area, please let me know.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=QQRFlb"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=QQRFlb" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/349702151/dont-go-into-office.html" title="Don't Go Into the Office" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=961892245428743330" title="9 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/961892245428743330" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/961892245428743330" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/dont-go-into-office.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-5649406724807820244</id><published>2008-07-28T14:55:00.001-04:00</published><updated>2008-07-28T14:56:58.304-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="revolutionmoney" /><category scheme="http://www.blogger.com/atom/ns#" term="work" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Revolution Money Seeks Senior DBA</title><content type="html">&lt;a href="http://www.networkworld.com/news/2008/051408-oracle-databases.html"&gt;Here's your chance to work with 11g RAC.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Either email me (chet dot justice at gmail) your resume and I will pass it along, or drop me a line and I will provide you with the appropriate contact information.&lt;br /&gt;&lt;br /&gt;Here are the details:&lt;br /&gt;&lt;br /&gt;&lt;B&gt;JOB SUMMARY&lt;/B&gt;&lt;br /&gt;&lt;br /&gt;As a Database Administrator with Revolution Money Inc, you will be responsible for all aspects of administration and the deployment of the various database components of our products.  Major duties are to include installation, configuration, integration, tuning, troubleshooting and support.&lt;br /&gt;&lt;br /&gt;Joining our team means you will have the opportunity to implement and use advanced features such as clustering and replication.  We operate in the following environment: Linux; Oracle 11g RAC on ASM with Oracle Data Guard and Oracle Streams; 7 x 24 on-call support.&lt;br /&gt;&lt;br /&gt;&lt;B&gt;DUTIES &amp; ESSENTIAL JOB FUNCTIONS&lt;/B&gt;&lt;br /&gt;•  Responsible for 24X7 production support.&lt;br /&gt;•  Install and maintain Oracle servers and service pack deployments. &lt;br /&gt;•  Manage security of application access to databases. &lt;br /&gt;•  Facilitate root cause analysis on database issues. &lt;br /&gt;•  Maintaining database performance by developing tuning methodologies.&lt;br /&gt;•  Perform backup and recovery.&lt;br /&gt;•  Assist database development environment and life cycle within the organization using best practices to ensure the benefits of standardization, documentation and change management.&lt;br /&gt;•  Providing information by collecting, analyzing, and summarizing database performance and trends.&lt;br /&gt;•  Research, planning and implementation of database upgrades and patches. &lt;br /&gt;•  Maintain technical documentation relating to database management. &lt;br /&gt;•  Perform benchmarking analysis to properly size hardware platforms. &lt;br /&gt;&lt;br /&gt;&lt;B&gt;OTHER FUNCTIONS AND RESPONSIBILITIES&lt;/B&gt;&lt;br /&gt;&lt;br /&gt;Assist our internal customers running Oracle Database products including Oracle Applications.&lt;br /&gt;&lt;br /&gt;&lt;B&gt;QUALIFICATIONS&lt;/B&gt;&lt;br /&gt;&lt;br /&gt;Required:&lt;br /&gt;&lt;br /&gt;•  A Bachelor's Degree in computer science or equivalent is required along with 5+ years experience with Oracle as a DBA.&lt;br /&gt;•  Production experience managing and monitoring Oracle 10g RAC databases.&lt;br /&gt;•  Oracle OEM/Grid Control, RMAN&lt;br /&gt;•  Strong PL/SQL , UNIX Scripting, Perl &lt;br /&gt;•  Solid Linux/UNIX and networking experience.&lt;br /&gt;•  Must be highly motivated, and a quick learner.&lt;br /&gt;•  Strong interpersonal skills and the ability to work well in teams, as well as working within a fast-paced, dynamic environment are requirements. &lt;br /&gt;&lt;br /&gt;&lt;B&gt;Desirable Skills:&lt;/B&gt;&lt;br /&gt;&lt;br /&gt;•  Oracle 11g  RAC databases&lt;br /&gt;•  Oracle Streams&lt;br /&gt;•  Oracle BI/Data Warehouse, Oracle Financials, OID, OWB
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=j6Ou3g"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=j6Ou3g" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/348680070/revolution-money-seeks-senior-dba.html" title="Revolution Money Seeks Senior DBA" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=5649406724807820244" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/5649406724807820244" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/5649406724807820244" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/revolution-money-seeks-senior-dba.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-7887934511715644527</id><published>2008-07-27T22:09:00.004-04:00</published><updated>2008-07-27T22:23:36.833-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="plsql" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><title type="text">Foot In Mouth Syndrome</title><content type="html">On Friday of last week we were doing our first code review (well, my first code review at this job).  A fun 2600 line package, 42 pages.  &lt;br /&gt;&lt;br /&gt;As were going through one piece, there's an exception block, with an explicit ROLLBACK, some logging code, and then a COMMIT.  Of course the logging code should be an autonomous transactions, but apparently it's a bit sketchy.&lt;br /&gt;&lt;br /&gt;Anyway, I blather on about not needing an explicit ROLLBACK after the exception as everything is rolled back prior...&lt;br /&gt;&lt;br /&gt;"no it's not."&lt;br /&gt;&lt;br /&gt;Me:  "Yes it is."&lt;br /&gt;&lt;br /&gt;"No, it's not."&lt;br /&gt;&lt;br /&gt;Me:  "Yes, it is."&lt;br /&gt;&lt;br /&gt;We then moved on.  I go back to my desk to write up a quick test proving my point.&lt;br /&gt;&lt;br /&gt;Of course I was wrong though.  If you have thing one and thing two and the exception occurs on thing two, the data/record/whatever for thing one exists.  And, if you are going to issue a COMMIT and you don't want that orphaned record out there, you must issue an explicit ROLLBACK.&lt;br /&gt;&lt;br /&gt;I sent a note out to everyone saying that my colleague is right, but I was still irked by it somehow.&lt;br /&gt;&lt;br /&gt;It just didn't feel right.  &lt;br /&gt;&lt;br /&gt;So I left for lunch for a bit, still thinking about if of course.&lt;br /&gt;&lt;br /&gt;Wait, I was saying one thing but thinking about something else.  I was thinking of a logical transaction.  Thing two depends on thing one therefore you would never, ever want to COMMIT after the exception.  The logging code through me off for some reason.&lt;br /&gt;&lt;br /&gt;I of course had to send out another email explaining my thought process and my mistake, in essence making me seem the hard loser.  Why do I have to do that?  Just let it lie...&lt;br /&gt;&lt;br /&gt;Oh well, I've done it before and I'll probably do it again.  Thankfully I work with some good people so they won't hold it over my head for too long...
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=MnrkC5"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=MnrkC5" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/347945640/foot-in-mouth-syndrome.html" title="Foot In Mouth Syndrome" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=7887934511715644527" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/7887934511715644527" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/7887934511715644527" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/foot-in-mouth-syndrome.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-8388719872166980844</id><published>2008-07-16T21:55:00.001-04:00</published><updated>2008-07-16T21:58:04.655-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="plsql" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="fraud" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Fraud Analysis?</title><content type="html">So we are pondering how to go about fraud analysis real time.&lt;br /&gt;&lt;br /&gt;One thing currently holding us back is that all the key fields are encrypted (obviously).  How do you go about doing fraud analysis with such seemingly high overhead?&lt;br /&gt;&lt;br /&gt;My question to you is, do you know of any fraud related off-the-shelf tools or libraries out there?  Preferably written in PL/SQL, but Java or C will do as well.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=HY78dq"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=HY78dq" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/337623646/fraud-analysis.html" title="Fraud Analysis?" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=8388719872166980844" title="7 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/8388719872166980844" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/8388719872166980844" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/fraud-analysis.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-8720513518753458983</id><published>2008-07-14T22:36:00.002-04:00</published><updated>2008-07-14T22:38:44.866-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sql" /><category scheme="http://www.blogger.com/atom/ns#" term="style" /><title type="text">Commas:  Before or After the Line?</title><content type="html">&lt;iframe allowTransparency="true" frameborder="0" src="http://www.toluna.com/DisplayCustPoll.aspx?PollID=78578" width="250" height="180" scrolling="no"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;div style="text-align:center;width:250px;"&gt;&lt;a href="http://www.toluna.com" target="_blank" title="Create polls and vote for free. dPolls.com"&gt;&lt;img src="http://www.toluna.com/dPollsLink.aspx" border="0" alt="Create polls and vote for free. dPolls.com"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I'm in a new group again which means I have to learn (and accept) other people's style.  No one at WellCare put commas before the line (thankfully), but I've found a few here.&lt;br /&gt;&lt;br /&gt;I've finally come to accept that this is just style and doesn't really matter, as long as the code does what it's intended to do.  &lt;br /&gt;&lt;br /&gt;Yes, it's silly, but we all have our little quirks right?
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=s1odwV"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=s1odwV" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/335675764/commas-before-or-after-line.html" title="Commas:  Before or After the Line?" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=8720513518753458983" title="8 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/8720513518753458983" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/8720513518753458983" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/commas-before-or-after-line.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-4588394876357868474</id><published>2008-07-10T21:50:00.005-04:00</published><updated>2008-07-11T00:09:31.438-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="LC" /><category scheme="http://www.blogger.com/atom/ns#" term="funny" /><title type="text">Men Are From Venus?</title><content type="html">So my wife calls me today to share a funny story.&lt;br /&gt;&lt;br /&gt;Apparently my son (Little Chet) asked about metorites.  He had seen them on Jimmy Neutron - Boy Genius.  She starts explaining what they are and the conversation led to talk about the space shuttle and the space station.&lt;br /&gt;&lt;br /&gt;LC:  What do they do up there?&lt;br /&gt;&lt;br /&gt;WIFE:  They do all kinds of stuff, experiments, look at planets, etc.&lt;br /&gt;&lt;br /&gt;LC:  The look at planets?  Like Planet Penis?&lt;br /&gt;&lt;br /&gt;WIFE:  What?!&lt;br /&gt;&lt;br /&gt;LC:  Planet Penis, the one close to Earth.&lt;br /&gt;&lt;br /&gt;WIFE:  You mean &lt;i&gt;&lt;b&gt;V&lt;/b&gt;&lt;/i&gt;enus?&lt;br /&gt;&lt;br /&gt;LC:  Yeah, that's the one.&lt;br /&gt;&lt;br /&gt;He doesn't get "Uranus" yet...
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=xeR2A8"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=xeR2A8" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/332260732/men-are-from-venus.html" title="Men Are From Venus?" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=4588394876357868474" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/4588394876357868474" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/4588394876357868474" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/men-are-from-venus.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-2639510974211487981</id><published>2008-07-09T21:56:00.005-04:00</published><updated>2008-07-09T22:06:21.391-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="datawarehouse" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Pseudo Column ROWDATE?</title><content type="html">I'm working a little bit in the datawarehouse again (by the way, is it two words or one?).  A technical guy from Oracle showed up today to help us decide the best way to move forward on capturing changes.  There were essentially 4 methods:&lt;br /&gt;&lt;br /&gt;1.  SQL and PL/SQL&lt;br /&gt;2.  Streams (CDC)&lt;br /&gt;3.  OWB/ODI&lt;br /&gt;4.  Logical Standby/Data Guard&lt;br /&gt;&lt;br /&gt;As someone on the phone was talking, I started to wander...hmmm...what about some kind of pseudo column for that stored the last update (either INSERT or UPDATE) of a row?&lt;br /&gt;&lt;br /&gt;Off the top of my head, I can think of rowid, rownum, and level.  I'm sure there are others (feel free to comment).&lt;br /&gt;&lt;br /&gt;Oracle, I'm sure, stores that information some where right?&lt;br /&gt;&lt;br /&gt;I hadn't really given a thought as to the feasibility or the impact it might have, but that would make capturing changes a whole lot easier...
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=xQ2inF"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=xQ2inF" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/331315228/pseudo-column-rowdate.html" title="Pseudo Column ROWDATE?" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=2639510974211487981" title="9 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/2639510974211487981" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/2639510974211487981" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/pseudo-column-rowdate.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-3100579559415705842</id><published>2008-07-08T21:00:00.002-04:00</published><updated>2008-07-08T21:12:05.764-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sql" /><category scheme="http://www.blogger.com/atom/ns#" term="puzzle" /><category scheme="http://www.blogger.com/atom/ns#" term="funny" /><title type="text">Count The K's</title><content type="html">I have this really annoying co-worker who happens to be the DBA.  Everytime he walks by my desk he pounces on my keyboard.  I've learned to Windows Key + L to lock the computer when I hear him approaching, but occasionally I forget.&lt;br /&gt;&lt;br /&gt;As I'm standing near my unlocked computer he starts typing furiously in my sql*plus session (shouldn't he know better?).  I should know better...&lt;br /&gt;&lt;br /&gt;Walking away he asks, "How many K's are in there?"&lt;br /&gt;&lt;br /&gt;I ignored him, but then wondered myself...what's the best solution to &lt;i&gt;this&lt;/i&gt; problem?&lt;br /&gt;&lt;br /&gt;So, here it goes:&lt;br /&gt;&lt;pre class="code"&gt;DECLARE&lt;br /&gt;  l_count_k NUMBER := 0;&lt;br /&gt;  l_string VARCHAR2(300);&lt;br /&gt;  l_string_length INTEGER;&lt;br /&gt;BEGIN&lt;br /&gt;  l_string := 'W34 6OKWE;KTL;SERT;LKSERTSLKRLTKRTKL;KERTL;ERKT;LKERLTKERKT;EKT;LEKRT;LEK;&lt;br /&gt;LTKERTKERKT;LEKRT;LEKRT;LER;LTKETK;ERKT;LEKRT;LEKT;LEKR;LTKETKERTKL;ERKTL;ERKTL;ET;LEKT;LEKRT;LERTL;&lt;br /&gt;EKRL;TKELTERTKL;ETL;EKTL;EKTL;ETL;ERTL;EL;TERTRTL;ERTL;ERTL;ERTL;EKRT;LEKTL;EKT;LERTL;EKL;KER;LTKE;L&lt;br /&gt;TKELTKER';&lt;br /&gt;&lt;br /&gt;  l_string_length := LENGTH( l_string );&lt;br /&gt;&lt;br /&gt;  FOR i IN 1..l_string_length LOOP&lt;br /&gt;    IF SUBSTR( l_string, i, 1 ) IN ( 'K', 'k' ) THEN&lt;br /&gt;      l_count_k := l_count_k + 1;&lt;br /&gt;    END IF;&lt;br /&gt;  END LOOP;&lt;br /&gt;  &lt;br /&gt;  dbms_output.put_line( 'Kk Count:  ' || l_count_k );&lt;br /&gt;END;&lt;br /&gt;/&lt;br /&gt;&lt;/pre&gt;Easy enough, 45.&lt;br /&gt;&lt;br /&gt;Then I started thinkinhg...can I do this in pure SQL?  Of course!&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;SELECT &lt;br /&gt;  SUM( CASE&lt;br /&gt;         WHEN SUBSTR( UPPER( mystring ), rownum, 1 ) = 'K' THEN&lt;br /&gt;           1&lt;br /&gt;       END ) k&lt;br /&gt;FROM&lt;br /&gt;  dual,&lt;br /&gt;  (&lt;br /&gt;    SELECT 'W34 6OKWE;KTL;SERT;LKSERTSLKRLTKRTKL;KERTL;ERKT;LKERLTKERKT;EKT;LEKRT;LEK;&lt;br /&gt;    LTKERTKERKT;LEKRT;LEKRT;LER;LTKETK;ERKT;LEKRT;LEKT;LEKR;LTKETKERTKL;ERKTL;ERKTL;ET;LEKT;LEKRT;LERTL;&lt;br /&gt;    EKRL;TKELTERTKL;ETL;EKTL;EKTL;ETL;ERTL;EL;TERTRTL;ERTL;ERTL;ERTL;EKRT;LEKTL;EKT;LERTL;EKL;KER;LTKE;L&lt;br /&gt;    TKELTKER' mystring&lt;br /&gt;    FROM dual&lt;br /&gt;  ) c&lt;br /&gt;CONNECT BY LEVEL &lt;= LENGTH( mystring )&lt;br /&gt;&lt;br /&gt;COUNT_OF_K&lt;br /&gt;----------&lt;br /&gt;        45&lt;br /&gt;&lt;br /&gt;1 row selected.&lt;/pre&gt;I'm sure many of you can do better than that.  So let's see 'em.  &lt;a href="http://prodlife.wordpress.com/2008/07/01/just-return-any-random-row/"&gt;Prodlife&lt;/a&gt;, this isn't a complicators test either.  ;)
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=P8r4Jk"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=P8r4Jk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/330322336/count-ks.html" title="Count The K's" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=3100579559415705842" title="9 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/3100579559415705842" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/3100579559415705842" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/count-ks.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-327506570089450863</id><published>2008-07-06T23:18:00.003-04:00</published><updated>2008-07-06T23:30:09.335-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="process" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="work" /><title type="text">Process</title><content type="html">I read &lt;a href="http://www.thedailywtf.com"&gt;The Daily WTF&lt;/a&gt;, well, daily.  On Thursday last week, there was a &lt;a href="http://thedailywtf.com/Articles/Slaves-to-The-Process.aspx"&gt;good one&lt;/a&gt; on process.  Essentially, the entire process had to be followed when an error occurred at boot.  F1 would have solved the problem immediately...&lt;br /&gt;&lt;br /&gt;My first job I never really got to put anything into production, so I wasn't real familiar with it.  My second job, I was the lone ranger, so I did everything myself (though I did not do development in production).  My &lt;a href="http://www.oraclenerd.com/2008/05/wellcare-lessons-learned.html"&gt;last job&lt;/a&gt; however, was full of "The Process."  &lt;br /&gt;&lt;br /&gt;Rightfully so, especially in a large environment (i.e. more than 1 developer), though I think it was a bit overdone.  And up until one of my failed deployments, the deployment itself was done through the Change Request (CR).  What I mean by that, is that the code was attached to the CR itself.  Since I attached a newer version, which had not been QA'd, well, you get the picture.  We finally moved to a system whereby the DBAs actually deployed from our source control system...thankfully.&lt;br /&gt;&lt;br /&gt;Now I'm in an environment that's a mix between the last job and the second to last.  Everything is QA'd, but there isn't this whole process surrounding deployments...yet.  Fortunately we're small enough to deal with it.&lt;br /&gt;&lt;br /&gt;What's the point?  I'm not sure.&lt;br /&gt;&lt;br /&gt;Perhaps it's that I've learned more what not to do from The Daily WTF...
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=HEzSvP"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=HEzSvP" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/328526627/process.html" title="Process" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=327506570089450863" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/327506570089450863" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/327506570089450863" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/process.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-7605657389182286243</id><published>2008-07-02T21:19:00.002-04:00</published><updated>2008-07-02T21:24:19.665-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="triggers" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Compound Triggers</title><content type="html">Seriously, &lt;a href="http://www.oraclenerd.com/2008/06/fun-with-triggers.html"&gt;I don't like triggers&lt;/a&gt;.  But if you have to maintain them, you might as well make the best of it.&lt;br /&gt;&lt;br /&gt;While trying to figure out my problem the other day, I ran across &lt;a href="http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/triggers.htm#CIHEFGFD"&gt;Compound Triggers&lt;/a&gt;.  I hadn't read about it in the 11g New Features guide, but since I don't use triggers, I wasn't sure if it was new or not.  Apprently it is...&lt;br /&gt;&lt;br /&gt;In essence, you can combine multiple triggers into one.  I won't go into the gory details (because I don't know the gory details), but I will provide the example from the docs for your perusal.&lt;pre class="code"&gt;&lt;br /&gt;CREATE TRIGGER compound_trigger&lt;br /&gt;  FOR UPDATE OF sal ON emp&lt;br /&gt;    COMPOUND TRIGGER&lt;br /&gt;&lt;br /&gt;  -- Declaration Section&lt;br /&gt;  -- Variables declared here have firing-statement duration.&lt;br /&gt;  threshold CONSTANT SIMPLE_INTEGER := 200;&lt;br /&gt;&lt;br /&gt;  BEFORE STATEMENT IS&lt;br /&gt;  BEGIN&lt;br /&gt;    ...&lt;br /&gt;  END BEFORE STATEMENT;&lt;br /&gt;&lt;br /&gt;  BEFORE EACH ROW IS&lt;br /&gt;  BEGIN&lt;br /&gt;    ...&lt;br /&gt;  END BEFORE EACH ROW;&lt;br /&gt;&lt;br /&gt;  AFTER EACH ROW IS&lt;br /&gt;  BEGIN&lt;br /&gt;    ...&lt;br /&gt;  END AFTER EACH ROW;&lt;br /&gt;END compound_trigger;&lt;br /&gt;/&lt;br /&gt;&lt;/pre&gt;At the very minimum (if you have to use them), you might as well combine them into one and save a bit on maintenance/debugging!
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=FacLBH"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=FacLBH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/325363027/compound-triggers.html" title="Compound Triggers" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=7605657389182286243" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/7605657389182286243" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/7605657389182286243" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/compound-triggers.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-2535736541615905960</id><published>2008-07-02T20:54:00.002-04:00</published><updated>2008-07-02T20:59:49.565-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="blogging" /><title type="text">Editorial Control Over Comments</title><content type="html">I recently commented on a blog that's fed through OraNA.  Actually, I left one, received a comment back by the author, and then commented again.  The author has editorial review before posting comments publicly.&lt;br /&gt;&lt;br /&gt;I have no problem with that, I practice it.  Fortunately, I haven't had the tough choice of whether to publish or not.  It can't be easy.&lt;br /&gt;&lt;br /&gt;That said, my second comment, in response to his response to my initial comment (still with me? ;) was never published.  This may have been a simple oversight (it was yesterday), but I have no idea (yet anyway).&lt;br /&gt;&lt;br /&gt;I blog because I crave the challenge.  I want people to tell me I'm completely full of sh*t.  Seriously.  As long as it doesn't get personal, I'm all for discussion.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=eJ5u7t"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=eJ5u7t" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/325340506/editorial-control-over-comments.html" title="Editorial Control Over Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=2535736541615905960" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/2535736541615905960" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/2535736541615905960" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/editorial-control-over-comments.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-4367306876720335130</id><published>2008-07-02T20:33:00.001-04:00</published><updated>2008-07-02T20:34:54.586-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="puzzle" /><category scheme="http://www.blogger.com/atom/ns#" term="funny" /><title type="text">Funny License Plate</title><content type="html">&lt;pre class="code"&gt;&lt;br /&gt;H20UUP2&lt;br /&gt;&lt;/pre&gt;First to figure out wins absolutely nothing but praise!
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=K0IsNp"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=K0IsNp" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/325340510/funny-license-plate.html" title="Funny License Plate" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=4367306876720335130" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/4367306876720335130" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/4367306876720335130" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/funny-license-plate.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-3709393898442445729</id><published>2008-07-01T21:52:00.004-04:00</published><updated>2008-07-01T22:01:12.206-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="constraints" /><category scheme="http://www.blogger.com/atom/ns#" term="apex" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title type="text">Lookup Tables</title><content type="html">Also known as reference, crosswalk and a few other names.&lt;br /&gt;&lt;br /&gt;I love 'em.&lt;br /&gt;&lt;br /&gt;I'm not afraid to use them.  It certainly makes that table count go up, but you know what you're getting.&lt;br /&gt;&lt;br /&gt;I have ADDRESS_TYPES, PHONE_TYPES, PERSON_TYPES (in an intersection table of course) and any other kind of TYPE you can imagine.&lt;br /&gt;&lt;br /&gt;I could use CHECK constraints I guess, but if it's anything other than Y or N, I typically create a lookup table to go with the table.&lt;br /&gt;&lt;br /&gt;Let's take an ADDRESS table.  ADDRESSTYPECODE becomes an attribute of an address.  It gets a Foreign Key to the ADDRESS_TYPES table and also (many seem to leave this one out), a NOT NULL constraint.  Every address &lt;i&gt;&lt;b&gt;has&lt;/b&gt;&lt;/i&gt; to have an type.&lt;br /&gt;&lt;br /&gt;To make it somewhat easier, I use codes (as opposed to IDs which I tend to associate with numbers) so a join isn't absolutely necessary.  If 'HOME' is the ADDRESSTYPECODE, you would rarely need to join as it's self evident what that means.  If the lookup table is large, I'd typically use ID (or numbers) for the key.&lt;br /&gt;&lt;br /&gt;Like I said, it bumps up that table count and makes things look a bit "messy," but you know exactly what belongs in what column.  And if you're using ApEx, administrative screens are a snap!&lt;br /&gt;&lt;br /&gt;Just don't ask &lt;a href="http://it.toolbox.com/blogs/data-ruminations/columns-named-type-are-lame-13019"&gt;Duke Ganote&lt;/a&gt; whether type is a good name or not!
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=m25uaC"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=m25uaC" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/324517689/lookup-tables.html" title="Lookup Tables" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=3709393898442445729" title="3 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/3709393898442445729" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/3709393898442445729" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/07/lookup-tables.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-6105161820788145639</id><published>2008-06-30T20:55:00.005-04:00</published><updated>2008-06-30T21:18:43.432-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="plsql" /><category scheme="http://www.blogger.com/atom/ns#" term="triggers" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Fun With Triggers</title><content type="html">I don't care a whole lot for triggers.  About the only thing I see of use is for some sort of auditing.&lt;br /&gt;&lt;br /&gt;That said, I don't know a whole lot about them either.  I don't know the specifics of how they work.  I was tested today...&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;CREATE TABLE t&lt;br /&gt;(&lt;br /&gt;  update_date DATE DEFAULT SYSDATE,&lt;br /&gt;  update_user VARCHAR2(30)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;INSERT INTO t ( update_date ) &lt;br /&gt;VALUES ( ADD_MONTHS( SYSDATE, 100 ) );&lt;br /&gt;&lt;br /&gt;INSERT INTO t ( update_date ) &lt;br /&gt;VALUES ( ADD_MONTHS( SYSDATE, -22 ) );&lt;br /&gt;&lt;br /&gt;CJUSTICE@XE&gt;SELECT * FROM T;&lt;br /&gt;&lt;br /&gt;UPDATE_DA UPDATE_USER&lt;br /&gt;--------- ------------------------------&lt;br /&gt;31-OCT-16&lt;br /&gt;31-AUG-06&lt;/pre&gt;Easy enough.&lt;br /&gt;&lt;br /&gt;My requirement is that I capture the update_user, specifically in the case where it is not supplied.  And this is where I ran into a wall.&lt;br /&gt;&lt;pre class="code"&gt;CREATE OR REPLACE&lt;br /&gt;TRIGGER biu_t&lt;br /&gt;  BEFORE INSERT OR UPDATE&lt;br /&gt;  ON t&lt;br /&gt;  REFERENCING NEW AS NEW OLD AS OLD&lt;br /&gt;  FOR EACH ROW&lt;br /&gt;BEGIN&lt;br /&gt;  IF :NEW.update_user IS NULL THEN&lt;br /&gt;    :NEW.update_user := USER;&lt;br /&gt;  END IF;&lt;br /&gt;END;&lt;br /&gt;/&lt;br /&gt;show errors&lt;/pre&gt;Easy enough.&lt;br /&gt;&lt;pre class="code"&gt;UPDATE t &lt;br /&gt;  SET update_date = ADD_MONTHS( SYSDATE, -12 );&lt;br /&gt;&lt;br /&gt;CJUSTICE@XE&gt;SELECT * FROM T;&lt;br /&gt;&lt;br /&gt;UPDATE_DA UPDATE_USER&lt;br /&gt;--------- ------------------------------&lt;br /&gt;30-JUN-07 CJUSTICE&lt;br /&gt;30-JUN-07 CJUSTICE&lt;br /&gt;&lt;br /&gt;2 rows selected.&lt;/pre&gt;OK, not too bad.  Let's try specifying the UPDATE_USER.&lt;br /&gt;&lt;pre class="code"&gt;UPDATE t&lt;br /&gt;  SET update_date = ADD_MONTHS( SYSDATE, 12 ),&lt;br /&gt;      update_user = 'BOLLOCKS';&lt;br /&gt;&lt;br /&gt;UPDATE_DA UPDATE_USER&lt;br /&gt;--------- ------------------------------&lt;br /&gt;30-JUN-09 BOLLOCKS&lt;br /&gt;30-JUN-09 BOLLOCKS&lt;/pre&gt;Good, everything's working as expected...or is it?  Let's connect as another user:&lt;br /&gt;&lt;pre class="code"&gt;CJUSTICE@XE&gt;conn hr/testing@xe&lt;br /&gt;Connected.&lt;br /&gt;&lt;br /&gt;UPDATE cjustice.t SET update_date = SYSDATE - 100;&lt;br /&gt;&lt;br /&gt;HR@XE&gt;SELECT * FROM cjustice.t;&lt;br /&gt;&lt;br /&gt;UPDATE_DA UPDATE_USER&lt;br /&gt;--------- ------------------------------&lt;br /&gt;22-MAR-08 BOLLOCKS&lt;br /&gt;22-MAR-08 BOLLOCKS&lt;/pre&gt;What?  Why didn't the user get updated with HR?  Let's add some dbms_output statements to the trigger:&lt;br /&gt;&lt;pre class="code"&gt;CREATE OR REPLACE&lt;br /&gt;TRIGGER biu_t&lt;br /&gt;  BEFORE INSERT OR UPDATE&lt;br /&gt;  ON t&lt;br /&gt;  REFERENCING NEW AS NEW OLD AS OLD&lt;br /&gt;  FOR EACH ROW&lt;br /&gt;BEGIN&lt;br /&gt;  dbms_output.put_line( 'New Value:  ' || :NEW.update_user );&lt;br /&gt;  dbms_output.put_line( 'Old Value:  ' || :OLD.update_user );&lt;br /&gt;&lt;br /&gt;  IF :NEW.update_user IS NULL THEN&lt;br /&gt;    :NEW.update_user := USER;&lt;br /&gt;  END IF;&lt;br /&gt;END;&lt;br /&gt;/&lt;br /&gt;show errors&lt;br /&gt;&lt;br /&gt;HR@XE&gt;UPDATE cjustice.t SET update_date = SYSDATE + 100;&lt;br /&gt;New Value:  BOLLOCKS&lt;br /&gt;Old Value:  BOLLOCKS&lt;br /&gt;New Value:  BOLLOCKS&lt;br /&gt;Old Value:  BOLLOCKS&lt;br /&gt;&lt;br /&gt;2 rows updated.&lt;br /&gt;&lt;br /&gt;Elapsed: 00:00:00.04&lt;br /&gt;HR@XE&gt;SELECT * FROM cjustice.t;&lt;br /&gt;&lt;br /&gt;UPDATE_DA UPDATE_USER&lt;br /&gt;--------- ------------------------------&lt;br /&gt;08-OCT-08 BOLLOCKS&lt;br /&gt;08-OCT-08 BOLLOCKS&lt;br /&gt;&lt;br /&gt;2 rows selected.&lt;/pre&gt;So UPDATE_USER was not updated with the value of HR, which I would expect.  The :NEW and :OLD values are exactly the same...I'm guessing that Oracle makes a copy of the record first (puts it into a collection or something?) so UPDATE_USER would never be NULL.&lt;br /&gt;&lt;br /&gt;Ultimately, I scrapped the update of UPDATE_USER in the trigger.  I did force the UPDATE_DATE = SYSDATE, and that was it.&lt;br /&gt;&lt;br /&gt;Ideally, I would specify that in the package call, but we aren't there yet.  In my opinion, no other user would have UPDATE, INSERT or DELETE privileges on the table.  But that's what I have.&lt;br /&gt;&lt;br /&gt;Can someone with more experience with triggers help me out?  Or advise me on what's going on?
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=A5Vcdc"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=A5Vcdc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/323665277/fun-with-triggers.html" title="Fun With Triggers" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=6105161820788145639" title="4 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/6105161820788145639" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/6105161820788145639" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/06/fun-with-triggers.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-579859878956437349</id><published>2008-06-30T01:04:00.002-04:00</published><updated>2008-06-30T01:09:22.224-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="avis" /><category scheme="http://www.blogger.com/atom/ns#" term="hertz" /><title type="text">Hertz Still Sucks</title><content type="html">From Hertz:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Dear Mr. Justice:&lt;br /&gt;&lt;br /&gt;We have received a report from USAA regarding your rental in Baltimore.  We appreciate the opportunity to address your concerns.&lt;br /&gt;&lt;br /&gt;We are always concerned when a customer is disappointed with our service for any reason.  When customers accept the Fuel Purchase Option (FPO), they are pre-paying for a full tank of fuel in advance at a price per gallon that is comparable to local gasoline stations.  There is no refund given for any fuel left in the tank at return, and this was stated on the rental record you signed; it is noted on the second page of the contract at the top.  In addition, the estimated charges at the time of rental were $117.01, and this is the exact amount you were charged.  However, we sincerely apologize for any misunderstanding concerning these charges and regret the confusion regarding the FPO.&lt;br /&gt;&lt;br /&gt;At the same time, we realize communication problems can occasionally occur.  In the interest of customer satisfaction, we have processed a $30.00 credit to your MasterCard account.  This is approximately one-half of the FPO charge.&lt;br /&gt;&lt;br /&gt;Mr. Justice, we appreciate your business.  We hope to serve you again soon with more positive results.&lt;br /&gt;&lt;br /&gt;Sincerely,&lt;br /&gt;&lt;br /&gt;Redacted&lt;br /&gt;Executive Administrator&lt;br /&gt;OKC Customer Relations&lt;br /&gt;The Hertz Corporation&lt;br /&gt;P.O. Box 26120&lt;br /&gt;14501 Hertz Quail Springs Parkway&lt;br /&gt;Oklahoma City, OK  73134&lt;br /&gt;U.S.A.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;No, they didn't call either.  Nor did they honestly address any of my complaints.  &lt;br /&gt;&lt;br /&gt;I never denied that I signed the agreement (thereby responsible for the FPO) and I didn't expect any compensation for it.  My problem was with the particular agent who knew I would be in town for one day only and sold it to me anyway without telling me the specifics.&lt;br /&gt;&lt;br /&gt;Oh well.  Avis I'd use since they called my father and addressed his concerns.  Hertz, never again.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=RYrX6k"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=RYrX6k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/322992249/hertz-still-sucks.html" title="Hertz Still Sucks" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=579859878956437349" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/579859878956437349" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/579859878956437349" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/06/hertz-still-sucks.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-8884584404576003487.post-6772022198748945307</id><published>2008-06-26T23:54:00.002-04:00</published><updated>2008-06-26T23:59:37.228-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="wellcare" /><category scheme="http://www.blogger.com/atom/ns#" term="work" /><title type="text">Corporate Life III</title><content type="html">See &lt;a href="http://www.oraclenerd.com/2008/01/corporate-life.html"&gt;Part I&lt;/a&gt; and &lt;a href="http://www.oraclenerd.com/2008/01/corporate-life-continued.html"&gt;Part II&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In Part I of Corporate Life, I said:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;It feels like I've experienced about every event I could have imagined:&lt;br /&gt;1. In January of 2007, a new CIO/SVP was hired and promptly restructured (replaced the VPs) the IT department.&lt;br /&gt;2. In October of 2007, we had a nifty FBI raid.&lt;br /&gt;3. January of 2008, we appear to be losing our CEO, CFO and General Counsel.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://prodlife.wordpress.com/"&gt;prodlife&lt;/a&gt; then mentioned that I hadn't experienced layoffs.&lt;br /&gt;&lt;br /&gt;Four months later I did, on May 22, WellCare laid off 208 employees.  I blogged it.  I was fired.&lt;br /&gt;&lt;br /&gt;I'm up to five corporate experiences.&lt;br /&gt;&lt;br /&gt;I'm still missing the merger/acquisition and the IPO.  Anything I'm missing?
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/oraclenerd/RahJ?a=Tseypg"&gt;&lt;img src="http://feeds.feedburner.com/~a/oraclenerd/RahJ?i=Tseypg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/oraclenerd/RahJ/~3/321041888/corporate-life-iii.html" title="Corporate Life III" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8884584404576003487&amp;postID=6772022198748945307" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.oraclenerd.com/atom.xml" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/6772022198748945307" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8884584404576003487/posts/default/6772022198748945307" /><author><name>oraclenerd</name><uri>http://www.blogger.com/profile/12412013306950057961</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://www.oraclenerd.com/2008/06/corporate-life-iii.html</feedburner:origLink></entry></feed>
