數(shù)據(jù)訪問(wèn)由SQL Server遷移向Oracle數(shù)據(jù)庫(kù)的問(wèn)題整理
求解答啊,在數(shù)據(jù)訪問(wèn)由SQL Server遷移向Oracle數(shù)據(jù)庫(kù)時(shí),總會(huì)或多或少有些問(wèn)題,這里,筆者把一些問(wèn)題總結(jié)出來(lái),希望高手們來(lái)幫忙解答。
一、在Oracle查詢出來(lái)的字段名均為大寫(xiě)。
即時(shí)在SQL中使用Pascal形式寫(xiě)語(yǔ)句SELECT FieldName From TableName,返回的結(jié)果中字段名仍然為“FILEDNAME”。現(xiàn)解決方法為使用字段別名,語(yǔ)句SELECT FieldName ""FieldName"" From TableName。Oracle數(shù)據(jù)庫(kù)中應(yīng)該有對(duì)此進(jìn)行控制的開(kāi)關(guān)語(yǔ)句吧,求Oracle高手賜教。
二、Oracle數(shù)據(jù)庫(kù)中沒(méi)有Guid(UniqueIdentifier)類型。
可以在Oracle中使用RAW和CHAR類型替代GUID,但因?yàn)镃HAR使用的長(zhǎng)度過(guò)長(zhǎng)會(huì)導(dǎo)致索引分頁(yè)太多影響查詢效率。所以盡量使用RAW(16),但注意一點(diǎn),在.NET Framework中使用Guid的構(gòu)造函數(shù)Guid(Byte[] byteArray)創(chuàng)建出來(lái)的Guid的字符串與ByteArray對(duì)應(yīng)的16進(jìn)制序列會(huì)有不同,比較時(shí)類型不一致會(huì)出現(xiàn)問(wèn)題。
三、Guid類型的SQL命令參數(shù)請(qǐng)使用DbType.RAW,長(zhǎng)度16,原因見(jiàn)上。
四、Oracle中沒(méi)有現(xiàn)成的Table-Valued Function,需要三步創(chuàng)建,而且在查詢中稍有不同。
1.創(chuàng)建返回的表記錄的類型
- create or replace type YourRowType is object (Field1 RAW(16));
2.創(chuàng)建用表記錄組成的表的類型
- create or relplace type YourTableType as table of YourRowType;
3.創(chuàng)建函數(shù)
- create or replace function YourFunction (Parameter1 in RAW)
- return YourTableType
- as returnValue YourTableType;
- Variable1 RAW(16);
- begin
- {Function Body Partion}
- return returnValue;
- end;
4.表值函數(shù)的查詢
- select * from table(YourFunction(parameterVariable));
五、基本查詢語(yǔ)句中T-SQL與PL/SQL的異同。
1.T-SQL參數(shù)標(biāo)識(shí)符為“@”,而PL/SQL中為“:”。
2.PL/SQL中無(wú)法使用“WITH(NOLOCK)”關(guān)鍵字,應(yīng)該是用事務(wù)級(jí)別進(jìn)行控制。
3.T-SQL中使用SELECT @VariableName=Count(*) FROM TableName即可向變量中寫(xiě)入查詢值,而PL/SQL中需要SELECT COUNT(*) INTO v_variable FROM TableName的形式。
原文鏈接:http://www.cnblogs.com/richardc2k/archive/2011/03/18/1987971.html
【編輯推薦】