
本文档主要从 与 语法上进行差异性比较,诸如两者在,性能,优化等 方面的差别不作非常。 ●概念上差别 1.Oracle是一种对象关系管理系统( ORDBMS),而 Sql server只是关 系型管 理系统( RDBMS) . 2.Oracle使用 Internet文件系统,该平台基于 Java的应用程序,可以 使基于成为 Internet的研发系统; Sql server是基于 3.Orace主要的三类文件是:数据文件,控制文件,恢复日志文件 Sql server: 主要数据文件(必须有且没法有一个),次要数据文件 以及日志文件 4.两者支持的命令类型差不多,数据定义语言,数据操纵语言,事务 处理控制语言, 数据控制语言 .在 Oracle中,在事务控制语言中不仅 commit,rollback 等还多了一个 Savepoint,设置保存点。 5.oracle sql的扩展叫 PL/SQL,主要的结构化查询软件有 sql*plus, isql*plus, pl/sql等 Ms sql的扩展叫 Transact-SQL,主要的结构化查询软件就是自带的 查询分析器 6.主要数据类别 Orace:主要支持 char ,varchar2,long,number,datetime,raw,long raw,clob,blob,bfie 前面三个是 Character数据种类, varchar2支持可变间距的字符串, long支持可 变长度的字符数据, raw,long raw用于储存二进制数据, long raw可 变长度 最后三个是大对象( lob)数据类别 ,存储非结构化的信息,例如声音 剪辑,视频文件 CLOG表示 Character Lob,可以储存长期的字符数据,它针对内存非 结构化的 XML 文档更加有用。
BLOG表示 Binary LOG,此数据种类可以储存大型二 进制对象,如 图形、视频剪辑,声音文件等 支不支持, money,货币 Sql server主要支持的文本类型 char,varchar,nchar,nvarchar,text,ntext,image,货币类型 Money,二进制 binary,varbinary等等 ●开发语法 A.SQL 语法 两者的 SQL语法基本上是同样的,只是一些细节方面的弊端 一: 表的管理:修改表的结构,如减少,删除列 ,創建表 修改表 1.修改表的列的數據類型,大小的定義不同,如下面修改數據類 型。 Ms sql是 ALTER TABLE table_name ALTER COLUMN col DECIMAL (5, 2) Oracle 是 Alter TABLE table_name modify(col decimal(5,2)) 2.增加和刪除表的列,兩者是同样的 Alter tabe table_name add(col definition) Alter tabe table_name drop column col_name 3 .Oracle如果不要用某列,然後又不想刪除,就 可以将某个列标 记为未用 Alter tabe table_name set unused(tel_no) .创建临时表 Oracle的語法是: Create global temporary table aa(col number) on commit preserve rows; 临时表只在客户会话时存在的表,或其数据在用户事务处理 期间可 持续存在的表 ,创建临时表时可以选定该表能否应当在客户会 话 期间大幅存在(使用 on commit preserve rows) On commit delete rows表示事务处理完成后删除它的行 Ms sql的語法是 : Select * into #temptable from existedtable 二 查询方面: 1.查表的前 N行记录 oracle是用 rownum如 select * from table_name where rownum<n Ms sql是用 top如 select top n * from table_name 2.查詢表的結構Orace可以通 過 desc来查看表的结构 语法是: desc table_name 或者使用数据字典表 user_tab_coumns也可以查看到 Select column_name,data_type from user_tab_coumns Where table_name='' Ms sql可以通過一些系統的存儲過程來看表的結構 語法是: exec sp_help table_name 3.将一个表的数据添加到此外一个表中 a.新表存在前提下: 兩者語法是一樣的,如 insert into newtable( col1) select col1 from old_table b.新表不存在前提下,可以用 oracle可以用 Create tabe new _table_name as select * from old_table ms sql可以用 Select * into new_table from old_table 三 操作符 1.連接操作符 Oracle是 ‘||’; Ms sql是 ‘+’ 2. Oracle的非常操作符中不等于除了 '<>'之外,还有一个 '!=' 3.算术操作符,都是 +-*/;逻辑操作符都是 and,not,or(相同點 ) 4. oracle集合操作符除了 union,union all之外还加入 intersect,minus Intersect是仅返回两个查询都有行, minus返回第一个查询有第 二个查询没有的行 四 函數 1.轉換函數 Oracle中有 to_char(),to_date(),to_number() Ms sql中有 cast,convert 2.系统日期: Oracle: sysdate Ms sql: getdate() 如 Select sysdate from dual一定要 from子句 Select getdate() 不一定要 from子 句 3.Decode函数相当 if else,或者 ms中的 case子句 语法是 decode(value,if1,then1,if2,then2....) 如 decode(col1,'1','true','0','fase') 4.常规函数Nvl 语法是 NVL(EXP1,EXP2)表示即使 ex1为空则返回 ex2 Nvl2语法是 nvl(exp1,exp2,exp3)表示如果 ex1为空,则返回 ex3,否则返回 ex2 Nullif语法是 nullif(ex1,ex2)如果这两个表达式相同则返回空 coalesce语法是 coalesce( ex1,ex2,....exn)返回第一个非空 表达式 5.分組函數 Oracle中的分組函數 Rollup,cube Rollup返回的结果集包含分组行和小计行, cube产生交叉 如: Select a,b,sum(c) from tabname group by rollup(a,b) Select a,b,sum(c) from tabname group by cube(a,b) Ms sql中的分組函數 compute和 compute by Compute子句为行聚集函数生成汇总值,该汇总值做为一个附 加的行显示 在结果集中。

没有 GROUP BY子句的状况下,也可以使用关键 字 COMPUTE. 此关键字使用 MAX,MIN,SUM,COUNT,AVG等变量生成汇总 值,而 compute by 则在控制中止时给出该汇总值 ,compute by必须包含在 order by 子句中。 還有很多函數,諸如日期函數,字符串函數等等,就不一一作比 較了。 Oracle中還有很多比較好的分析函數,也不列舉了。 五. Oracle中的 对象 同义词 作用:简化 SQL语句;隐藏对象的名称和所有者,提供对象的 公共访问等。 语法: CREATE PUBLIC SYNONYM seqname FOR OBJECT 序列 用来生成唯一、边续的整数sql server和oracle,它一般拿来自动生成主键或唯一 值的键。 創建序列: create sequence seqname [increment by 1] start with 1 maxvalue 10 minvalue 1 cycle cache 访问序列:Select seqname.nextval from dual 将返回序列的初始值 Select seqname.currval from dual 返回序列的当前值 簇( cluster) : 簇是共享同样数据块的一组表,因为这种表带有相同的列,并且 经常一起使用。
当两个或多个表的存储在物理上非常接近时,可以借助簇来提升 使用这种表的 SQL联接语句的性能。簇是内存表的方式 应该先创建簇,然后再创建簇中的表, 六. Oracle中的对象类别 1.抽象数据类型 此类别是包括一个或多个子类别的数据种类,并且这种数据类 型并不局限 于标准的 oracle数据类别 如: create or replace type t_mm as object(col number(3), col2 varchar2(20))/ 此时可以在创建表时使用该类别,如下 Create table test (aa varchar2(5),bb t_mm, cc number(10)) 插入记录: Insert into test values('cccc', t_mm(1,'col')) 类型声明: 用户定义的数据类别也可以声明为 final,not final,instantiable, not instantiabe Not final表示允许类型派生子类型。默认是 final create or replace type t_mm as object(col number(3), col2 varchar2(20)) Not final not instantiabe表示类型没有构造函数。

2.可变变量 可变字符有助于在单个行中储存和重复记录的属性。 数据与表中的其他数据是内存在一起的,有限数量的行,不能 被索引 创建可变字符的 语法是: create type array1 as varray(5) of varchar2(5) 向可变变量中插入记录 Insert into test1 values ('2ee', array1('1','2','3','4','5') ) Select * from test1结果集如下2ee '1','2','3','4','5' Select col2 from test1 结果集如下 '1','2','3','4','5' Select * from table(select t.col2 from test1 where col1='2ee'); 结果集如下 1 2 3 4 5 3.嵌套表 它是包括在表中的表,对每行数据项数目没有限制,一个表在 另一表中是成为一列,主表中的每一行的嵌套表可以包括若干 行。
创建嵌套表 先创建一个类型 Create type ord_ty as object(itemcode varchar2(5),qty _ord number(5), Qty_held number(5)); 创建另一个抽象数据类型,即嵌套表数据类别 Create type ord_nt as table of ord_ty 创建嵌套表 Create table order_mas (orderno varchar2(5),odate date, vencode varchar2(5), dets ord_nt) nested table dets store as ord_nt_tab; 向嵌套表中插入数据: Insert into order_mas values(‘ 001’, to_date('18-0708','DD-MM-YY'), 'V009',ord_nt( ord_ty('i001',10,5),ord_ty('i002',34,2)); 更新嵌套表的值: Update table(select e.dets from order_mas e where e.orderno='001') p Set value( p) =ord_ty('i090',8,9) where p.itemcode='i001'; 删除嵌套表的值: Delete from table(select e.dets from order_mas e where e.orderno='001') pwhere p.itemcode='i001'; 4.对象表 在对象表中每一行都是一个行对象,对象表与关系表不同: 对象表中的每一行都有一个 OID值,即对象标识符值。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-124457-1.html
有实战意义