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: