顯示具有 Oracle 標籤的文章。 顯示所有文章
顯示具有 Oracle 標籤的文章。 顯示所有文章

2014/3/25

SQL Server 使用OpenQuery,並使用參數傳值

SQL Server中建立好與Oracle連接後,可透過下列方式查詢Oracle DB Server的資料
SELECT * FROM OpenQuery[linkedServerName],'SELECT * FROM dual')
ex: SELECT * FROM OpenQuery(PROD,'SELECT * FROM dual')

但如果你要傳的SQL帶有字串時,如下語法
SELECT * FROM dual WHERE EmplID='12258'
則需要透過「轉義字符(')」來控制,因此SQL修改成如下的方式傳值
SELECT * FROM OpenQueryPROD,'SELECT * FROM dual WHERE EmplID=''12258''')

如果今天你要在傳的SQL中再加上參數了話,就會變得複雜了,請參考下列SQL來處理
DECLARE @SQL VARCHAR(1000)
DECLARE @OrgID VARCHAR(10)
SELECT @OrgID = 'SPK1'
SET @SQL = 'SELECT * FROM dual WHERE OrgID ='+@OrgID
SET @SQL = 'SELECT * FROM OpenQuery(PROD, ''' + REPLACE(@SQL, '''', '''''') + ''')'
EXEC(@SQL)

透過REPLACE函數,將SQL字串中的轉義字符調整成所需的樣式


2013/8/26

Oracle的SQL報表出現斷行錯誤

今天要分享Oracle執行SQL報表時,可能會出現的錯誤狀況

你是否曾經遇過,SQL明明就是正確的,在TOAD上可以順利執行,但上傳到Oracle之後,卻頻頻出現出現錯誤,或毫無作用

先前的做法是:將多餘的空行刪掉,並注意SQL最後一行有沒有加 / 符號

但將多餘的空行刪掉,這動作究竟是為甚麼呢?

這時候可以檢查你的SQL檔案,並顯示特殊字元看看

在notepad顯示特殊字元的方法很簡單:檢視 > 特殊字元 > 顯示所有字元(參考下圖:顯示特殊字元)

你會發現每個換行的地方會出現CR CF 的符號,這就是傳說中的換行符號

一般來說換行符號是CR CF配對產生的,CR表示增加一行,CF表示游標移到下一行起點

在Oracle中,如果換行字元不正確,那該SQL是無法正確執行的

因此如果你的檔案有換行,但無法正確執行(如下圖:不可執行的版本)那可能就是你的換行符號有問題了

顯示特殊字元:

clip_image002[8]

可執行的版本:

clip_image004[8]

不可執行的版本:

clip_image006

2011/5/31

Oracle 初學者心得

oracle的體系太龐大了,對於初學者來說,難免會有些無從下手的感覺,什麼都想學,結果什麼都學不好,所以把學習經驗共享一下,希望讓剛剛入門的人對oracle有一個總體的認識,少走一些彎路。

一、定位
oracle分兩大塊,一塊是開發,一塊是管理。開發主要是寫寫存儲過程、觸發器什麼的,還有就是用Oracle的Develop工具做form。有點類似於程序員,需要有較強的邏輯思維和創造能力,個人覺得會比較辛苦,是青春飯J;管理則需要對oracle數據庫的原理有深刻的認識,有全局操縱的能力和緊密的思維,責任較大,因為一個小的失誤就會down掉整個數據庫,相對前者來說,後者更看重經驗。