DbType   OracleType

SqlDatabase  OracleDatabase

SqlParam.cs

SqlServerHelper.cs

InsertByHashtableReturnPkVal

sql as oracle 无

public DataTable GetPageList(string sql, SqlParam[] param, string orderField, string orderType, int pageIndex, int pageSize, ref int count)
{
StringBuilder sb = new StringBuilder();
DataTable result;
try
{
int num = (pageIndex - 1) * pageSize;
int num2 = pageIndex * pageSize;
sb.Append("Select * From (Select ROW_NUMBER() Over (Order By " + orderField + " " + orderType);
sb.Append(string.Concat(new object[]
{
") As rowNum, * From (",
sql,
") As T ) As N Where rowNum > ",
num,
" And rowNum <= ",
num2
}));
count = Convert.ToInt32(this.GetObjectValue(new StringBuilder("Select Count(1) From (" + sql + ") t"), param));
result = this.GetDataTableBySQL(sb, param);
}
catch (Exception e)
{
this.Logger.WriteLog(string.Concat(new string[]
{
"-----------数据分页(Oracle)-----------\r\n",
sb.ToString(),
"\r\n",
e.Message,
"\r\n"
}));
result = null;
}
return result;
}

SqlServer转Oracle时代码注意事项

 1

Oracle:nvl

SqlServer:isnull

 2

insert,update,delete等用分号隔开的sql语句,必须前加begin,后加commit;end;并且去掉中间所有的\r\n。

select时,一个sql语句中不能包含多个select语句

/// <summary>
/// 将在SqlServer中,用分号隔开的多句sql语句,改为在Oracle中执行的Sql
/// 前面加begin,后面加end,去掉所有的\r\n
/// </summary>
/// <param name="_sqlserverSql"></param>
/// <returns></returns>
public static string ConvertMultipleSqlFromSqlserverToOracle(string _sqlserverSql)
{
    if (Global.CacheServerConfiger.IsOracle)
    {
        _sqlserverSql = _sqlserverSql.Trim();
        if (!_sqlserverSql.EndsWith(";"))
        {
            _sqlserverSql += ";";
        }
        _sqlserverSql = _sqlserverSql.Replace("\r\n", " ").Replace("\n", " ");
        _sqlserverSql = "begin " + _sqlserverSql + " commit;end;";
    }
    return _sqlserverSql;
}

 3 当数据类型为nvarchar2时,最好前面加N,例如insert into a(nvarchar2field) values(N'中文'),查询时where子句也如此,例如where name = N'张三'
 4 sql语句中的+,改为||
 5

Oracle中,在sql中做除法时,需要进行以下操作,否则c#中会算术溢出

round(count(*)/(cast(3 as float)), 28) --cast(3 as float)是为了和sqlserver保持一致,28是最大精度,不能大于28

 6

日期在SqlServer中可以按照字符串操作,但在Oracle中不行

--Oracle中插入时也必须做如下转换

Oracle:to_date('2010-12-21 12:02:30','YYYY-MM-DD HH24:MI:SS')

--SqlServer插入或者where子句中都可以直接使用字符串,但where子句中使用字符串,会加快查询速度

SqlServer:convert(datetime,''2010-12-21 12:02:30')

 7

想要保存一个时间的毫秒数,Oracle中的字段类型必须为timestamp,不能为date,因为date只保存时间值到秒。

--Oracle中插入时也必须做如下转换

Oracle:to_timestamp('2010-12-21 12:02:30.230940','YYYY-MM-DD HH24:MI:SS.FF')

--SqlServer插入或者where子句中都可以直接使用字符串,但where子句中使用字符串,会加快查询速度

SqlServer:Convert(datetime,'2010-12-21 12:02:30.230940')

 8

sql中日期想减得到秒的方法

Oracle: CAST((sysdate- to_date('2010-12-21 12:02:30','YYYY-MM-DD HH24:MI:SS'))*24*60*60  as float)

SqlServer:CONVERT(float, datediff(second, to_date('2010-12-21 12:02:30','YYYY-MM-DD HH24:MI:SS'), getdate()))

 9

Oracle中字段不允许存入'',即空字符串,只有null值,所以where子句中判断空值方法为:

Oracle:字段名 is null

SqlServer:(字段名 is null or 字段名 = '')

判断不为空值的方法

Oracle:字段名 is not null

SqlServer:(字段名 is not null and 字段名 != '')

 10

Oracle中Top N的写法:

--注意:Order by要写在子查询里,rownum是从1开始的

select * from
(
       select * from c_itcomp order by d_controladderss
)
where rownum <100
 
排序后从第4条记录取至第9条记录
select * from
(
  select rownum as num, t.* from
  (
         select a.* from a order by b
  ) t
)
where num > 3 and num < 10

11

Oracle中,给表定义别名的时候不能加as

例如:select * from 表名 as 别名!!!!注意,这是错误的,正确的应该是

select * from 表名  别名

12

Oracle中,字段的别名不能加单引号

例如:select 字段名 as '别名' from dual!!!!注意,这是错误的,正确的应该是

select 字段名 as 别名 from dual

13

Oracle中没有select sysdate as nowDate的写法,正确的应该是加个虚表dual

select sysdate as nowDate from dual

14

Oracle中,字段名,表名,别名,索引名,视图名等名称的长度不能超过30个字符

15

Oracle中,字段名都是大写的,即使select语句中是小写,得到的结果也是大写。因此,select到DataTable中后,binding到wpf时如果大小写不同,会绑定失败。在DataTable中分组和排序,也会失败。因此,尽量将DataTable中的字段名称改为大写。

16

Oracle中的Integer类型,在C#中是Decimal,因此,在C#中从DataTable取值进行类型转换时:

若要转成Int类型,需使用Convert.ToInt32,而不能使用(int),否则会报错

若要转成Bool类型,需使用Convert.ToBoolean,而不能使用(bool),否则会报错

sql zhuan ORACLE的更多相关文章

  1. 【SQL】Oracle分页查询的三种方法

    [SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...

  2. 历尽磨难之PL/SQL链接Oracle数据库

    说起来都是泪啊,上司布置的任务需要远程连接Oracle数据库,说实话这又是我人生中的第一次.我听到以后觉得不是什么大问题,然而我错了..错的很厉害! 我搞了一天一夜才弄好,这里面原因有很多,大体来讲还 ...

  3. General Ledger Useful SQL Scripts – Oracle Applications 11i

    General Ledger Useful SQL Scripts – Oracle Applications 11i Contents GL Set of Books Configuration O ...

  4. PL/SQL在Oracle服务器上连接出错

    今天在Oracle服务器上使用PL/SQL连接Oracle软件的时候出现了错误,错误如下: 具体的解决办法如下: 需要下载32位的Oracle Client,具体的步骤如下:登录Oracle官方网站 ...

  5. SQL优化(Oracle)

    (转)SQL优化原则 一.问题的提出 在应用系统开发初期.因为开发数据库数据比較少.对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,可是假设将应用系统提交实际应用后,随着数 ...

  6. MS SQL到Oracle的数据迁移笔记

    MS SQL到Oracle的数据迁移笔记 一.任务背景 旧系统使用MS SQL Server数据库,新系统使用Oracle数据库,现在需要将旧系统中的数据迁移到新系统中,旧数据按照约定的规则转换后,能 ...

  7. SQL Server,Oracle,DB2索引建立语句的对比

    原文引至:http://jvortex.blog.163.com/blog/static/16961890020122141010878/ 我们知道,索引是用于加速数据库查询的数据库对象.原理就是减少 ...

  8. PL/SQL连接oracle数据库

    PL/SQL连接oracle数据库 1.简单介绍 在不安装oracle数据库的情况下使用pl/sql连接远程oracle数据库. 2.详细步骤: a)      安装PL/SQL.依据自己的操作系统安 ...

  9. Sql for Oracle基本操作关键字

    Sql for Oracle基本操作关键字 +SQL TOP子句 TOP 子句用于规定要返回的记录的数目 SELECT column_name(s) FROM table_name WHERE ROW ...

随机推荐

  1. Hystrix 使用入门

    在很多系统架构中都需要考虑横向扩.单点故障等问题,对于一个庞大的应用集群,部分服务或者机器出现问题不可避免,在出现故障时,如何减少故障的影响.保障集群的高可用,成为一个重要的工作,Hystrix 是一 ...

  2. 一个基于netty的websocket聊天demo

    这里,仅仅是一个demo,模拟客户基于浏览器咨询卖家问题的场景,但是,这里的demo中,卖家不是人,是基于netty的程序(我就叫你uglyRobot吧),自动回复了客户问的问题. 项目特点如下: 1 ...

  3. ASP.NET中使用JSON方便实现前台与后台的数据交换

    ASP.NET中使用JSON方便实现前台与后台的数据交换 发表于2014/9/13 6:47:08  8652人阅读 分类: ASP.NET Jquery extjs 一.前台向后台请求数据 在页面加 ...

  4. 国外的开源项目Shopizer部署问题

    版本:shopizer-2.2.0 项目地址:https://github.com/shopizer-ecommerce/shopizer 使用IDEA时遇到和修改的问题 1.修改数据库类型为MYSQ ...

  5. elasticsearch 口水篇(2)CRUD Sense

    Sense 为了方便.直观的使用es的REST Api,我们可以使用sense.Sense是Chrome浏览器的一个插件,使用简单. 如图: Sense安装: https://chrome.googl ...

  6. python 指定文件编码的方法

    import sys reload(sys) sys.setdefaultencoding('utf-8')

  7. 【ZZ】号称“开发者神器”的GitHub,到底该怎么用?

    号称“开发者神器”的GitHub,到底该怎么用? https://mp.weixin.qq.com/s/zpKOBMKWckY05Mv_B28RgQ A developer’s introductio ...

  8. Oracle 官方文档地址

    官方文档地址: https://docs.oracle.com/cd/E11882_01/index.htm

  9. openstack热添加磁盘

    假定在虚拟机当中添加了磁盘,但是虚拟机没有识别出来:如何识别出来 可以使用命令 echo '- - -' >/sys/class/scsi_host/host0/scan 使用后就可以识别出来了 ...

  10. RecyclerAdapter封装

    import java.util.LinkedList; import java.util.List; import android.content.Context; import android.s ...