我有一個程序必須支持Oracle和SQL Server的數據庫。 在某些時候,我必須執行一個查詢,我想在select語句中連接兩列。具有相同未修改查詢的SQL Server和Oracle中的Concat字符串
在SQL Server中,這是用+操作
select column1 + ' - ' + column2 from mytable
和Oracle這樣做與CONCAT做
select concat(concat(column1, ' - '), column2) from mytable
我正在尋找一種方式來充分利用他們兩個,所以我代碼有兩個數據庫的單個SQL查詢文字字符串,我可以避免醜陋的構造,我需要檢查我連接的DBMS。我的第一本能是將不同的查詢封裝到一個存儲過程中,因此每個DBMS都可以擁有它們自己的查詢實現,但是我無法在Oracle中創建返回記錄集的過程,方式與SQL Server的確。
更新:創建SQL Server中的concat函數,因爲SQL Server要求業主在調用函數時,以指定不與Oracle兼容的查詢:
select dbo.concat(dbo.concat(column1), ' - '), column2) from mytable
我花了一段時間來在SQL Server中創建自己的concat函數後找出它。
在另一方面,看起來像在Oracle中SYS_REFCURSOR
功能不能用一個簡單的
exec myfunction
被調用,返回表中的SQL Server。
最後,解決方案是在兩個RDBM上創建一個名稱相同但視圖不同的視圖,然後我可以在視圖上執行一個簡單的select
。
我試了兩個,但都不讓我在編譯的代碼中保留相同的常量字面值SQL字符串。最後我發現的解決方案是創建一個視圖。 – Correa 2012-04-05 05:16:56