<?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-2062503065741767908</id><updated>2011-04-22T09:37:31.827+08:00</updated><title type='text'>HKLN Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hklnblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2062503065741767908/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hklnblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>HKLN</name><uri>http://www.blogger.com/profile/15638082379384566929</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>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2062503065741767908.post-6282292804783372237</id><published>2008-05-02T22:53:00.005+08:00</published><updated>2008-05-02T23:36:59.266+08:00</updated><title type='text'>Join 到頭暈怎麼辦？</title><content type='html'>&lt;p&gt;&lt;br /&gt;如果您看到一個很長的 SQL join 例如：&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SELECT&lt;br /&gt;*&lt;br /&gt;FROM&lt;br /&gt; mtl_parameters ship_from_org&lt;br /&gt;,hz_cust_site_uses_all ship_su&lt;br /&gt;,hz_party_sites ship_ps&lt;br /&gt;,hz_locations ship_loc&lt;br /&gt;,hz_cust_acct_sites_all ship_cas&lt;br /&gt;,hz_cust_site_uses_all bill_su&lt;br /&gt;,hz_party_sites bill_ps&lt;br /&gt;,hz_locations bill_loc&lt;br /&gt;,hz_cust_acct_sites_all bill_cas&lt;br /&gt;,hz_parties party&lt;br /&gt;,hz_cust_accounts cust_acct&lt;br /&gt;,ra_terms_tl term&lt;br /&gt;,oe_order_headers h&lt;br /&gt;,hz_cust_account_roles sold_roles&lt;br /&gt;,hz_parties sold_party&lt;br /&gt;,hz_org_contacts sold_cont&lt;br /&gt;,hz_party_relationships sold_rel&lt;br /&gt;,hz_cust_account_roles ship_roles&lt;br /&gt;,hz_parties ship_party&lt;br /&gt;,hz_org_contacts ship_cont&lt;br /&gt;,hz_party_relationships ship_rel&lt;br /&gt;,hz_cust_account_roles invoice_roles&lt;br /&gt;,hz_parties invoice_party&lt;br /&gt;,hz_org_contacts invoice_cont&lt;br /&gt;,hz_party_relationships invoice_rel&lt;br /&gt;,fnd_currencies fndcur&lt;br /&gt;,oe_transaction_types_tl ot&lt;br /&gt;,qp_list_headers_tl pl&lt;br /&gt;,ra_rules invrule&lt;br /&gt;,ra_rules accrule &lt;br /&gt;WHERE&lt;br /&gt; h.order_type_id = ot.transaction_type_id &lt;br /&gt;AND ot.language = userenv('LANG') &lt;br /&gt;AND h.price_list_id = pl.list_header_id(+) &lt;br /&gt;AND pl.language(+) = userenv('LANG') &lt;br /&gt;AND h.invoicing_rule_id = invrule.rule_id(+) &lt;br /&gt;AND h.accounting_rule_id = accrule.rule_id(+) &lt;br /&gt;AND h.payment_term_id = term.term_id(+) &lt;br /&gt;AND TERM.Language(+) =userenv('LANG') &lt;br /&gt;AND h.transactional_curr_code = fndcur.currency_code &lt;br /&gt;AND h.sold_to_org_id = cust_acct.cust_account_id(+) &lt;br /&gt;AND CUST_ACCT.PARTY_ID = PARTY.PARTY_ID(+) &lt;br /&gt;AND h.ship_from_org_id = ship_from_org.organization_id (+) &lt;br /&gt;AND h.ship_to_org_id = ship_su.site_use_id(+) &lt;br /&gt;AND ship_su.cust_acct_site_id= ship_cas.cust_acct_site_id(+) &lt;br /&gt;AND ship_cas.party_site_id = ship_ps.party_site_id(+) &lt;br /&gt;AND ship_loc.location_id(+) = ship_ps.location_id &lt;br /&gt;AND h.invoice_to_org_id = bill_su.site_use_id(+) &lt;br /&gt;AND bill_su.cust_acct_site_id= bill_cas.cust_acct_site_id(+) &lt;br /&gt;AND bill_cas.party_site_id = bill_ps.party_site_id(+) &lt;br /&gt;AND bill_loc.location_id(+) = bill_ps.location_id &lt;br /&gt;AND h.sold_to_contact_id = sold_roles.cust_account_role_id(+) &lt;br /&gt;AND sold_roles.party_id = sold_rel.party_id(+) &lt;br /&gt;AND sold_roles.role_type(+) = 'CONTACT' &lt;br /&gt;AND sold_cont.party_relationship_id(+)= sold_rel.party_relationship_id &lt;br /&gt;AND sold_rel.subject_id = sold_party.party_id(+) &lt;br /&gt;AND h.ship_to_contact_id = ship_roles.cust_account_role_id(+) &lt;br /&gt;AND ship_roles.party_id = ship_rel.party_id(+) &lt;br /&gt;AND ship_roles.role_type(+) = 'CONTACT' &lt;br /&gt;AND ship_cont.party_relationship_id(+)= ship_rel.party_relationship_id &lt;br /&gt;AND ship_rel.subject_id = ship_party.party_id(+) &lt;br /&gt;AND h.invoice_to_contact_id = invoice_roles.cust_account_role_id(+) &lt;br /&gt;AND invoice_roles.party_id = invoice_rel.party_id(+) &lt;br /&gt;AND invoice_roles.role_type(+) = 'CONTACT' &lt;br /&gt;AND invoice_cont.party_relationship_id(+)=invoice_rel.party_relationship_id &lt;br /&gt;AND invoice_rel.subject_id = invoice_party.party_id(+)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;您可試著把它圖像化，例如：&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;a href="http://www.hkln.net/blog/2008-05-03/out.png"&gt;http://www.hkln.net/blog/2008-05-03/out.png&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;這幅圖是用 Graphviz 畫的，以下 Perl 程式讀入 SQL 的 WHERE 子句，&lt;br /&gt;然後產生 dot 語言，送給Graphviz 畫圖。&lt;br /&gt;（把 WHERE 子句內容貼在 __DATA__ 之下）&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;my ($text, @predicates);&lt;br /&gt;&lt;br /&gt;$text = join '', &lt;DATA&gt;;&lt;br /&gt;&lt;br /&gt;$text =~ s/\n//g; &lt;br /&gt;&lt;br /&gt;@predicates = split /and/is, $text;&lt;br /&gt;&lt;br /&gt;print "digraph G { \n rankdir=LR;\n";&lt;br /&gt;&lt;br /&gt;foreach my $predicate (@predicates) {&lt;br /&gt; my ($left, $right, $left_table, $left_column, $right_table, $right_column);&lt;br /&gt; my ($left_is_outer, $right_is_outer);&lt;br /&gt; my ($arrowhead, $arrowtail, $color, $prop);&lt;br /&gt;&lt;br /&gt; $predicate = trim($predicate);&lt;br /&gt;&lt;br /&gt; ($left, $right) = split /=/, $predicate;&lt;br /&gt;&lt;br /&gt; $left = trim($left);&lt;br /&gt; $right = trim($right);&lt;br /&gt;&lt;br /&gt; if ($left =~ /\(\+\)/ ) {&lt;br /&gt;  $left_is_outer = 1;&lt;br /&gt; }&lt;br /&gt; if ($right =~ /\(\+\)/ ) {&lt;br /&gt;  $right_is_outer = 1;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; ($left_table, $left_column) = split /\./, $left;&lt;br /&gt; ($right_table, $right_column) = split /\./, $right;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; if ($right_column ne '') {&lt;br /&gt;  $right_table = lc( $right_table );&lt;br /&gt; }&lt;br /&gt; if ($left_column ne '') {&lt;br /&gt;  $left_table = lc( $left_table );&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; $arrowhead = 'none';&lt;br /&gt; $arrowtail = 'none';&lt;br /&gt; $color = 'black';&lt;br /&gt;&lt;br /&gt; if ($left_is_outer) {&lt;br /&gt;  $arrowtail = 'odot';&lt;br /&gt;  $color = 'red';&lt;br /&gt; }&lt;br /&gt; if ($right_is_outer) {&lt;br /&gt;  $arrowhead = 'odot';&lt;br /&gt;  $color = 'red';&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; $prop = qq{arrowhead=$arrowhead,arrowtail=$arrowtail, color=$color, label="$predicate"};&lt;br /&gt;&lt;br /&gt; print qq{ "$left_table"\t-&gt;\t"$right_table"\t[$prop] ; \n}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;print "}";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sub trim&lt;br /&gt;{&lt;br /&gt; my $string = shift;&lt;br /&gt; $string =~ s/^\s+//;&lt;br /&gt; $string =~ s/\s+$//;&lt;br /&gt; return $string;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;__DATA__&lt;br /&gt;&lt;br /&gt; h.order_type_id = ot.transaction_type_id &lt;br /&gt;AND ot.language = userenv('LANG') &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2062503065741767908-6282292804783372237?l=hklnblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hklnblog.blogspot.com/feeds/6282292804783372237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2062503065741767908&amp;postID=6282292804783372237' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2062503065741767908/posts/default/6282292804783372237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2062503065741767908/posts/default/6282292804783372237'/><link rel='alternate' type='text/html' href='http://hklnblog.blogspot.com/2008/05/join.html' title='Join 到頭暈怎麼辦？'/><author><name>HKLN</name><uri>http://www.blogger.com/profile/15638082379384566929</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-2062503065741767908.post-148751245658402400</id><published>2008-04-03T23:53:00.002+08:00</published><updated>2008-04-03T23:58:19.638+08:00</updated><title type='text'>李白教您炒港股技巧</title><content type='html'>《將進酒》　　　　　　李白&lt;br /&gt;&lt;br /&gt;君不見黃河之水天上來，奔流到海不復回？&lt;br /&gt;君不見高堂明鏡悲白髮，朝如青絲暮成雪？&lt;br /&gt;人生得意須盡歡，莫使金樽空對月。&lt;br /&gt;天生我才必有用，千金散盡還復來。&lt;br /&gt;烹羊宰牛且為樂，會須一飲三百杯。&lt;br /&gt;岑夫子，丹丘生，　　　　　　&lt;br /&gt;將進酒，杯莫停。　　　　　　&lt;br /&gt;與君歌一曲，請君為我傾耳聽：&lt;br /&gt;鍾鼓饌玉不足貴，但願長醉不願醒。&lt;br /&gt;古來聖賢皆寂寞，唯有飲者留其名。&lt;br /&gt;陳王昔時宴平樂，斗酒十千恣讙謔。&lt;br /&gt;主人為何言少錢？徑須沽取對君酌。&lt;br /&gt;五花馬、千金裘。呼兒將出換美酒，&lt;br /&gt;與爾同銷萬古愁。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;由左上往右下讀：&lt;br /&gt;&lt;br /&gt;河明歡，會耳不其謔，&lt;br /&gt;黃堂盡用，傾醉留讙酌，&lt;br /&gt;見高須有樂，我長者恣君酒，&lt;br /&gt;不見意必為生，為願飲千對美，&lt;br /&gt;君不得才且丘停，君但有十取換，&lt;br /&gt;君生我牛丹莫請，唯酒沽出，&lt;br /&gt;岑進歌玉皆平錢。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;解譯：&lt;br /&gt;&lt;br /&gt;黃河之水光明正大湧向香江，會令耳朵聽不進任何嘲笑的聲音，&lt;br /&gt;把黃金和房產都盡情投入股海，會令人沉醉於歡樂和美酒之中。&lt;br /&gt;每逄港股創新高，都必須有泡沫音樂奏起，這時我的長倉均以低恣態地走貨，&lt;br /&gt;在高位時不洋洋得意的人，最終必定為股災生還者，&lt;br /&gt;飲盡無數個對事情看得太美好的人的血汗錢，&lt;br /&gt;就算你這時還沒有賺到錢的話，也要暫且休息停手，&lt;br /&gt;因為一旦發生股災，就有十多隻好股給你換馬，&lt;br /&gt;如果你最終成為生還者，我的建議就是：就算大摩認為牛市重來，&lt;br /&gt;也不要中它的「請君入貨」之計，唯有繼續走貨沽出才是正途，&lt;br /&gt;因為在大行唱好之前所滲入的日元資金都是平錢。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2062503065741767908-148751245658402400?l=hklnblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hklnblog.blogspot.com/feeds/148751245658402400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2062503065741767908&amp;postID=148751245658402400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2062503065741767908/posts/default/148751245658402400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2062503065741767908/posts/default/148751245658402400'/><link rel='alternate' type='text/html' href='http://hklnblog.blogspot.com/2008/04/blog-post.html' title='李白教您炒港股技巧'/><author><name>HKLN</name><uri>http://www.blogger.com/profile/15638082379384566929</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-2062503065741767908.post-8142068422868461851</id><published>2007-12-23T13:05:00.000+08:00</published><updated>2007-12-23T13:35:56.379+08:00</updated><title type='text'>Water Oil Computer</title><content type='html'>Just another oil computer:&lt;br /&gt;&lt;a href="http://www.hkln.net/water_oil_computer/"&gt;&lt;br /&gt;http://www.hkln.net/water_oil_computer/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2062503065741767908-8142068422868461851?l=hklnblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hklnblog.blogspot.com/feeds/8142068422868461851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2062503065741767908&amp;postID=8142068422868461851' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2062503065741767908/posts/default/8142068422868461851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2062503065741767908/posts/default/8142068422868461851'/><link rel='alternate' type='text/html' href='http://hklnblog.blogspot.com/2007/12/water-oil-computer.html' title='Water Oil Computer'/><author><name>HKLN</name><uri>http://www.blogger.com/profile/15638082379384566929</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></feed>
