将SQL Server转换为Oracle

时间:2011-01-17 11:24:22

标签: asp.net sql-server oracle

在我的项目中,我有一个SQL数据库工作正常。但是现在我必须使应用程序支持oracle db。

我发现的一些限制是在Oracle中,没有位字段,表名不能大于30个字符。是否还有其他限制我需要牢记。

过去经验中的任何建议都会有所帮助。

4 个答案:

答案 0 :(得分:3)

如果我从早期的甲骨文时代回忆正确的话:

  • Oracle中没有IDENTITY列规范(您需要使用序列)

  • 您不能简单地从存储过程返回SELECT (columns)(您需要使用REF CURSOR

  • 当然,所有存储的proc / func都不同(Oracle的PL / SQL与T-SQL不同)

答案 1 :(得分:2)

Oracle中的ISNULL对应项NVL

select ISNULL(col, 0)...

select NVL(col, 0)...

如果您尝试在Oracle中没有from的情况下进行选择,那么您也会遇到困难。使用dual

select 'Hello' from DUAL

还要记住,在Oracle中,PL / SQL(过程SQL)和纯SQL之间存在区别。它们是两种截然不同的语言,通常是组合在一起的。

答案 2 :(得分:2)

  • Oracle数据库中的Varchar调用 varchar2限制为4000 字符
  • Oracles临时表的概念不同,它们具有全局重新定义的结构
  • 默认排序顺序和字符串比较区分大小写

将列添加到select *

Select * from table_1 order by id;

您必须在table_name或别名

前加上 * 的前缀
Select 
   (row_number() over (order by id)) rn,  
   t.* 
from table_1 t
order by id;

Oracle不区分null和''(空字符串)。对于插入和更新,您可以使用'',但要查询您必须使用null

create table t1 (
    id NUMBER(10),  
    val varchar2(20)
);

Insert into t1 values (1, '');
Insert into t1 values (2, null);
Select * from t1 where stringval = 0; -- correct but empty
Select * from t1 where stringval is null; -- returns both rows

答案 3 :(得分:1)

ORACLE不支持 TOP 子句。您可以使用 ROWNUM

代替 TOP

SQL Server: TOP (Transact-SQL)

SELECT TOP 3 * FROM CUSTOMERS 

ORACLE: ROWNUM Pseudocolumn

SELECT * FROM CUSTOMERS WHERE ROWNUM <= 3