在把Oracle查询结果转换为SQL Server的时候要特别当心一些不容易注意到的问题。
我们知道,T-SQL是SQL Server的语言引擎,而Oracle的语言引擎却是PLSQL.这两种查询语言都对
ANSI SQL-92标准进行了扩展以提供额外的支持力度。你所创建的应用程序几乎都要用到这些补充特性。本文就对最常用的、非标准的Oracle扩展进行了说明,同时还要介绍下如何
对这些扩展进行转化以用在SQL Server环境下。
列的选择
用PLSQL执行数据查询的时候,FROM子句是必须的,这同SQL Server的要求是一样的。 SELECT语句必须选择针对的数据表。在Oracle数据库内有一种特殊的表DUAL.DUAL表由
Oracle连同数据字典一同创建,所有的用户都可以用名称DUAL访问该表。这个表里只有一列DUMMY,该列定义为VARCHAR2
(1)类型,有一行值X.
从DUAL表选择数据常被用来通过SELECT语句计算常数表达式,由于DUAL只有一行数据,所以常数只返回一次。
Oracle下的DUAL查询如下所示:
SELECT
‘x’ FROM dual
而对等的SQL Server查询则是下面这个样子:
SELECT ‘x’
连接
Oracle用|| 符号作为连接符,而SQL Server的连接符是加号:+ .
Oracle查询如下所示:
Select ‘Name’ || ‘Last Name’
From tableName
对应的SQL Server查询如下所示:
Select ‘Name’ + ‘Last Name’
数字取舍
Oracle数据库内有一个TRUNC函数,该函数返回m位十进制数的n位;如果省略m则n就是0位。m的值可以为负,表示截去小数点左边m位数字。
在SQL Server下可以用Round或者Floor.
以下是Oracle查询:
SELECT
TRUNC(15.79,1) "Truncate" FROM DUAL;
下面是同类查询的SQL Server版本:
SELECT ROUND(15.79, 0) rounded ,
ROUND(15.79, 0,1) truncated
SELECT FLOOR(ROUND(15.79, 0)),
FLOOR(ROUND(15.79, 0,1) )
在把Oracle查询转换为SQL Server的时候要特别当心一些不容易注意到的问题。我们知道,T-SQL是SQL Server的语言引擎,而Oracle的语言引擎却是PLSQL.这两种查询语言都对
ANSI SQL-92标准进行了扩展以提供额外的支持力度。你所创建的应用程序几乎都要用到这些补充特性。本文就对最常用的、非标准的Oracle扩展进行了说明,同时还要介绍下如何
对这些扩展进行转化以用在SQL Server环境下。
列的选择
用PLSQL执行数据查询的时候,FROM子句是必须的,这同SQL Server的要求是一样的。 SELECT语句必须选择针对的数据表。在Oracle数据库内有一种特殊的表DUAL.DUAL表由
Oracle连同数据字典一同创建,所有的用户都可以用名称DUAL访问该表。这个表里只有一列DUMMY,该列定义为VARCHAR2
(1)类型,有一行值X.
从DUAL表选择数据常被用来通过SELECT语句计算常数表达式,由于DUAL只有一行数据,所以常数只返回一次。
Oracle下的DUAL查询如下所示:
SELECT
‘x’ FROM dual
而对等的SQL Server查询则是下面这个样子:
SELECT ‘x’
连接
Oracle用|| 符号作为连接符,而SQL Server的连接符是加号:+ .
Oracle查询如下所示:
Select ‘Name’ || ‘Last Name’
From tableName
对应的SQL Server查询如下所示:
Select ‘Name’ + ‘Last Name’
如何 *** 作Oracle数据库中的(+)连接
本文主要向你介绍的是Oracle数据库中的(+)连接的实际 *** 作,本文是以相关使用代码的描述来引出其实际的 *** 作,你如果是Oracle数据库中的'(+)连接的疯狂一族的话,就一起来看看吧!
1. 从表A.A1 (+) = 主表B.B1
复制代码SELECT
1.TO_CHAR(TBA.FBS_IO_DATE,'YYYY/MM/DD') A1
2.,TBA.TBA_TBD_NO A2
3.,TBB.TBB_NAME_S A3
4.,TBC.TBC_CHAR1 A4
5.,TBD.TBD_NAME A5
6.,TBA.TBA_SNS_NAME_SP A6
7.,TBA.TBA_TORI_KIN A7
8.,TO_CHAR(TBA.TBA_RPL_DATE,'YYYY/MM/DD') A8
9.FROM
10.SNTBATRN TBA
11.,ZMTBCMST TBC
12.,CMTBBMST TBB
13.,CMTBDMST TBD
14.WHERE
15.TBA.TBA_KAI_CODE = 'XXX'
16.AND TBA.TBA_KESHI_KBN = '0'
17.AND TBA.TBA_TAISYO_KBN IN ('0', '2')
18.AND TBB_KAI_CODE (+) = 'XXX'
19.AND TBB_BUN_CODE (+) = 'S001'
20.AND TBB_START_DATE <= SYSDATE
21.AND TBB_END_DATE >= SYSDATE
22.AND TBB.TBB_CODE (+)= TBA.TBA_STN_CODE
23.AND TBC.TBC_KAI_CODE (+) = 'XXX'
24.AND TBC.TBC_SUB_KBN (+) = 'SN'
25.AND TBD.TBD_KAI_CODE (+) = 'XXX'
26.AND TBD.TBD_CODE (+) = TBA.TBA_SNS_CODE
2. 主表A.A1 = 从表B.B1 (+)
1.复制代码
2.SELECT
3.TBA.TBA_1,
4.TBB.TBB_1,
5.TBC.TBC_1
6.FROM
7.TBA,
8.(SELECT TBB.TBB_1, TBB.TBB_2
9.FROM TBB
10.WHERE
11.TBB.TBB_3 LIKE '%NEWWEAPON%' TBB),
12.TBC
13.WHERE
14.主表TBC
15.TBA.TBA_A >2
16.从表TBB
17.AND TBA.TBA_2 = TBB.TBB_2
18.从表TBC
19.注意TRIM
20.AND TRIM(TBA.TBA_3) = TRIM(TBC.TBC_3 (+))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)