Google Prettify

2009-03-16

Oracle Join 分類

在Oracle的文件中將join分為下列幾類:
  1. Equijoins:
  2. 就是指一般的select from T1, T2 where T1.C1=T2.C2...。
  3. Self Joins
  4. 自己join自己。
  5. Cartesian Products
  6. 傳說中的卡迪生乘積。就是from T1, T2而不加其他限定條件。這種join方式會有MxN筆數出來,實務上一般也不會用這種。為什麼ANSI sql會有這種用到現在還是個謎...。
  7. Inner Joins
  8. 效果與equijoin相同。
  9. Outer Joins
  10. Outer join分為LEFT [OUTER] JOIN, RIGHT [OUTER] JOIN 2種。 即使某一邊的值為null仍會帶出另一邊的記錄。
Outer Join是很常用的join方式,但是foreign key會對應不到primary key這原本就是不太合理的事...。這就好像說課程表對應不到授課老師一樣;通常是在開發時期,授課老師的基本資料尚未備齊。Oracle建議使用在where 條件中使用(+)運算子來代替outer join 語法。當使用left join時,(+)是加在等號右邊,例如
from T1 left join T2 on T1.C1=T2.C1 lfet join T3 on (T1.C2=T3.C2 and T1.C3=T3.C3)...
等價於
from T1,T2,T3 where T1.C1=T2.C1(+) and T1.C2=T3.C2(+) and T1.C3=T3.C3(+)...

2009-02-25

調整Weblogic中的記憶體?

關於這點, 看過網路上很多文章, 介紹修改變數MEM_ARGS
set MEM_ARGS=-Xmx1024m -Xms512m
或是說設定參數
-Xmx1024m
我先來談談第一種方式。(第二種方式不會談, 因為沒試過。)
原本以為在startWeblogic.cmd當中加一行
set MEM_ARGS=-Xmx1024m -Xms512m
就可以了。但是事實上似乎沒那麼簡單。就結論來說,正確的設法應該是在commEnv.cmd中修改MEM_ARGS設定。我使用的是sun的JVM,就修改sun那段。若使用jrockit當然就改bea那段。
:sun
 if "%PRODUCTION_MODE%" == "true" goto sun_prod_mode
  set JAVA_VM=-client
  set MEM_ARGS=-Xms32m -Xmx1024m -XX:MaxPermSize=128m
  set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none
  goto continue
:sun_prod_mode
 set JAVA_VM=-server
 set MEM_ARGS=-Xms32m -Xmx1024m -XX:MaxPermSize=128m
也有人說改setEnv檔也可以,不過我沒試過。很明顯的,針對一些變數值,即使在startWeblogic.cmd中設定過後,最終會被其他的設定蓋過去。
第二種設定(還是談到了)則是直接更改JVM option的參數(不過我沒試過)。
測試環境是Weblogic 8.1.4。
這篇文章中有針對JVM記憶體做了還不錯的說明

2009-02-02

新年四處走

    新年終於結束了。這幾個幾禮拜,時常到台灣各地去做2天1夜的旅行。雖然行程不是我安排的,可是我卻蠻喜歡這樣的行程: 慢慢的走、以看風景的為主的行程。這樣的行程第一個好處,除了不會太趕,第二個好處: 由於是以欣賞風景為主,因此花費並不高。

2009-01-17

除心之外再無他物

         這句話其實是來自王陽明的心外無物。我們所關注的東西都是來自於意念。因為有慾望,所以有各式各樣的活動。因為有需求,所以有各式各樣的交易行為、建築、食物。人與人意念的交錯造成了現在我們所看見的大千世界。因此我們的世界雖然千變萬化、但變化的源頭終究是來自於人心。
        衍生說法是心外無理。世間一切的東西都沒有意義,因為意義都是人類所賦予的。不同的人對於相同的情形可以給予不同的描述、從不同的角度給予不同的意義。不管理再怎麼說,一樣源自於人心。
        然而在自然界中仍然存在這一些。有人稱他為真理。例如生老病死,地心引力,這些是天生萬物時就存在在那裡了。很多時候人類的一些行為仍離不開這所謂的道。當然我們也可以透過心替這些道做些詮釋: 最有名的莫過於學如逆水行舟。逆水行舟原本只是一種現象,就偏偏有人用他來比喻求學的狀況。了解了心外無物、心外無理之後就可以發覺最難搞的還是人。(這是所有搞資訊的共用的說法)。

2008-12-19

我上輩子應該是個教師

最近發現我時常有機會就會想對人說說自己的看法、想法。用另外一種方式來說叫"說教"。就好像父母親千叮萬嚀的都是他們的想法認知與看法;希望子女不要這樣、應該那樣;就好像老師的碎碎唸,只希望學生懂得一切的真理、成就一切正義...。 根據來生學理論,我上輩子就應該是個教師。也許上輩子曾誤人子弟,所以這輩才來當工程師...(好像沒什麼關係)。

        唸了好幾次才發覺(反應好慢),勸人為善是一種拆炸彈的過程。其實這個理論,高中時劉墉已經教過我,只可惜那時的我體會不了,甚至一度懷疑是不是排版錯誤。如今終於因為平常碎碎唸的習慣而嘗到被炸的滋味了。這證明了3件事:

第一,[勸人為善]是[影響別人]的一個實例,[影響別人]是[勸人為善]的抽象化。2者皆是一種藝術,過程皆要小心與耐心。(X的,我真的是標準的工程師...)
第二,我拆炸彈的技術還不夠好。
第三,那本書沒有排版錯誤,只是講得不夠清楚..。

為此我還特別去翻了翻劉墉的一些著作...。

2008-11-16

SVK使用說明

初始

1.下載SVK
注意: 如果本機有安裝oracle 或環境變數中有PERL5LIB需拿掉或更名。這是perl會讀取的。Oracle會將這個變數指到oracle的perl,可能與svk下載的版本不合。
注意: path中必須包含. 路徑。
2.將目前的資料與server同步。該commit的 commit、該update的update。
3.將原本的檔案保留一份下來。
4.指行dos 指令:
svk depot –i
說明: 初始化svk的depot資料。depot是alias。全名是depotmap。Svk會在"C:\Documents and Settings\當前用戶名\.svk\Local建立reponsitory。可以用depot –relocate重新指定。
可以使用下列指令看更多說明:
svk help commands
svk help depotmap
svk help depot
svk mkdir //mirror -m "Mkdir mirror"
說明: 建立目錄。
svk mirror svn://SVNSERVER //mirror/project # project目錄會自動建立
svk sync //mirror/project # 將SVNERVER的資料同步到//mirror中
svk mkdir //local
svk cp //mirror/ project //local/ project # project目錄會自動建立
5.建新目錄/刪除原本SVN中所有的svn設定檔。反正要一個不受原本SVN控管的目錄。如果原本沒有使用SVN那只要新建一個就可以了。假設是svn。
D:\mydoc\svn>
6.進到目錄。進行checkout動作。這裡checkout與CC或perforce中的checkout意義不同。
svk co //my/local
7.下一步比較麻煩。如果你是即有系統的話,需要將原本在local上卻不在SVN上的一些檔案,例如設定檔從備份檔一個一個轉過來。
8.到此已經有一份workarea可供修改。

日常使用

1.更新
A.更新檔案至最新版本。
svk sync —all
svk update
B.使用pull 指令可一次進行更新、merge。我建議使用這個,因為只要下一次只令即可。
svk pull -a
2.如果有衝突的話,解決衝突。解決完後,要告訴SVK已經解決完。
svk resolved local/License.txt
3.commit code到local。注意一定要到local目錄。
svk commit –C
svk commit
我建議先使用-C參數檢查是commit的檔案,或是在commit時不要直接加-m log訊息,以彈出文字可,一來可確定各檔案控管的狀態(在我的經驗裡,有時候有些檔案的狀態會是【?】,我建議在此時可手動將狀態改成適當的狀態);二來是可決定那些檔案要不要列入控管。
4.將local brach的異動上傳到repository 上。注意;SVK有自己的版本編號。SVK的版本隨著depot的異動而改變;不是SVN的repository。
svk push
push其實是smerge –If的wrap指令。也就是說,在以前(不使用push)的情況下,也可以使用smerge指令,將異動上傳到repository。當merge 由local branch 版本至mirror時,SVK也同將//mirro上的資訊上傳到repository上。
svk smerge //local //mirror

您或許對這些有興趣

最後

謝謝您的閱讀,希望您可以有豐富的收獲。