天天看点

Oracle与Sql Server差异点详解

1、create函数或存储过程异同点

      oracle 创建函数或存储过程一般是 create or replace ……

      sql server 则是在创建之前加一条语句,先判断是否已经存在,如果存在删除已有的函数或存储过程。

函数语句:

存储过程:

2、结构异同点(在新建存储过程的时候,语法格式上的差异)

oracle:

sql server:

3、调用参数

4、变量命名及赋值

5、if语句

或者

6、游标的定义及使用及循环操作

oracle定义游标:

sql server定义游标:

oracle使用游标:

sql server使用游标:

oracle循环操作游标 (超级简洁):

sql server循环操作游标:

7、计算时间差

8、 top n 问题

在sql server中,top n 问题很容易解决,如下例:从表stbdbdj中选取排序后的第一行数据进行赋值。

在sql中解决方法很简单,在select 后面加上:top n 即可,其中 n 代表行数。

在oracle中,没有top n这个命令,我们采取把两层查询方式解决:首先,把需要查找的字段值直接进行排序,然后在外面进行第二次查询,并使用rownum决定行数。

9、如何解决结果集返回时,*

和变量同时存在的问题

下面例子表示,在用游标返回结果集时,同时返回一个变量的值,在sql server中代码如下所示:

但在oracle中却没有这种用法,’*’后面必需跟from。解决方法如下:

1)我们可以把 '*' 变成所需要选择的字段,就是说采用表中需要显示的全部字段表示*。

例如:

2)如果这个字段或者说变量是从另外一张表中取出来的,同样可以采用下面的办法。

10、用sql server里case函数替换decode函数替换

sqlserver 没有decode函数:

11、oracle的select … into问题

oracle里直接取字段值,用select … into语法

sql server直接取则直观的多,直接等于就可以了

12、update语句中 表别名问题

        因为有时候更新表时,需要从另一个表中更新数据,此处oracle update语句可以给表起别名。但在sql server中update语句不允许用别名,但可以直接使用表明引用。如下:

oralce: