[转]SQLServer和Oracle,存款和储蓄进度分别,常用函数比较

本文转自:http://www.cnblogs.com/neru/archive/2011/08/18/2144049.html

原先平昔用sqlserver,唯有很少的一点oracle的经验,未来要用oracle做三个很复杂的储存进程,感觉好别扭~

为什么就不能用sqlserver呢。。。

 


 

SQL server
与Oracle开发相比较

  本文书档案首要从oracle与sql server语法上展开差别性比较,诸如两者在管制,品质,优化等地点的差别不作相比较。

●概念上有别

   1.Oracle 是一种对象关全面据库管理种类(O福特ExplorerDBMS),而Sql server 只是关系型数据库管

     理系统(RDBMS).

   二.Oracle行使Internet文件系统,该系统基于Java的应用程序,能够使数据库基于成为

     Internet的开发平台;Sql
server 是依据windows

   3.Orace 要害的三类文件是:数据文件,控制文件,苏醒日志文件

     Sql server: 首要数据文件(必须有且只好有叁个),次要数据文件以及日志文件

   四.两者协助的吩咐体系大致,数据定义语言,数据操纵语言,事务处理控制语言,

     数据控制语言.在Oracle中,在业务控制语言中除了commit,rollback等还多了2个

     Savepoint,设置保存点。

   5.oracle sql的扩展叫PL/SQL,重要的结构化查询工具有sql*plus,isql*plus, pl/sql等

     Ms sql的扩充叫Transact-SQL,首要的结构化查询工具正是自带的询问分析器

   六.首要数据类型

     Orace:首要辅助char
,varchar二,long,number,datetime,raw,long raw,clob,blob,bfie

     前面多个是Character数据类型,varchar二帮忙可变长度的字符串,long协助可

     变长度的字符数据,raw,long
raw用于存款和储蓄二进制数据,long raw
可变长度

     最后七个是大指标(lob)数据类型,存储非结构化的新闻,例如声音剪辑,视频文件

     CLOG表示Character Lob,能够储存大批量的字符数据,它对于仓库储存非结构化的XML

     文档卓殊管用。BLOG表示Binary LOG,此数据类型能够储存大型2进制对象,如

     图形、摄像剪辑,声音文件等

     支不协助,money,货币

     Sql server 首要扶助的文件类型char
,varchar,nchar,nvarchar,text,ntext,image,货币类型

     Money,二进制
binary,varbinary等等

●开发语法

A.SQL 语法

    两者的SQL语法基本上是壹致的,只是部分细节方面包车型的士题材

壹: 表的田管:修改表的构造,如增添,删除列,創建表

       修改表

          一.修改表的列的數據類型,大小的定義不一样,如上面修改數據類型。

            Ms sql是ALTER
TABLE table_name ALTER COLUMN col DECIMAL (5, 2)

               
Oracle是 Alter
TABLE table_name modify(col decimal(5,2))

          2.充实和刪除表的列,兩者是1致的

            Alter tabe table_name add(col definition)

            Alter tabe table_name drop column col_name

          三 .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

二 查询方面:      

一.查表的前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

         三.将七个表的数码增加到其余1个表中

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是‘+’

         二. Oracle的相比较操作符中不对等除了'<>’之外,还有八个 ‘!=’

         3. 算术操作符,都以+-*/;逻辑操作符都以and,not,or(相同點)

         4. oracle聚众操作符除了union,union all之外还投入intersect,minus

           Intersect是仅再次来到三个查询都有行,minus重临第多个查询有第

           二个查询未有的行

   四   函數

        一.轉換函數

           Oracle 中有to_char(),to_date(),to_number()

           Ms sql 中有cast,convert

        贰.种类日期:

Oracle: sysdate

Ms sql:  getdate()

          如

            Select sysdate from
dual 一定要from子句

            Select getdate() 不自然要from子句

         三.Decode函数万分if
else,也许ms 中的case语句

           语法是decode(value,if1,then1,if2,then2….)

             如decode(col1,’1′,’true’,’0′,’fase’)

四.常规函数

Nvl 语法是NVL(EXP一,EXP二)
表示借使ex一为空则再次来到ex二

Nvl二 语法是nvl(exp一,exp2,exp3)表示假如ex1为空,则重回ex三,不然重临ex贰

Nullif 语法是nullif(ex一,ex二)
假使那七个表达式相等则赶回空

coalesce语法是coalesce(ex1,ex贰,….exn)重回第叁个非空表明式

         五.分組函數

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 子句中。

         還有很多函數,諸如日期函數,字符串函數等等,就不11作比較了。

         Oracle中還有很多比較好的辨析函數,也不列舉了。

5.Oracle中的数据库对象

同义词

      功效:简化SQL语句;隐藏对象的称谓和全数者,提供对象的公共访问等。

      语法:CREATE PUBLIC
SYNONYM seqname FOR OBJECT

序列

     用来扭转唯1、边续的平头,它1般用来自动生成主键或唯一值的键。

    創建体系: 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. 抽象数据类型

    此类型是富含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表示项目未有构造函数。

  1. 可变数组

    可变数组有助于在单个行中存款和储蓄和重复记录的性质。

    数据与表中的其余数据是储存在一块的,有限数量的行,不可能被索引

    创造可变数组的 语法是:

       create type array1 as varray(5) of varchar2(5)

    向可变数组中插入记录

    Insert into test1 values (‘2ee’, array1(‘1′,’2′,’3′,’4′,’5’) )

    Select * from test一 结果集如下

       2ee

       ‘1’,’2′,’3′,’4′,’5′

    Select col2 from test一 结果集如下

       ‘1’,’2′,’3′,’4′,’5′

    Select * from table(select t.col二 from test1 where col一=’二ee’);
结果集如下

       1

       2

       3

       4

       5

  1. 嵌套表

   它是富含在表中的表,对每行数据项数据未有限制,贰个表在

另一表中是作为1列,主表中的每一行的嵌套表能够涵盖若干行。

    创制嵌套表

       先创造2个种类

       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-07-08′,’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′) p

        where p.itemcode=’i001′;

  1. 对象表

              在目的表中每一行都以二个行对象,对象表与涉及表不一样:

              对象表中的每一行都有1个OID值,即对象标识符值。该值是在开创行时

             分配的。能够动用create table 命令来成立对象表。

               在创立对象类型时,Oracle 中是分裂意为属性定义约束规范,不过

             能够在创设对象表时为目的类型的性格钦赐约束规范。

               Create table vend_master of vend_ty(vencode constraint
vc_pk primary key);

               创制对象表与关系表语法分裂

               表的施用方法不一样插入数据能够运用抽象数据类型的构造函数,假使目的

              表所依照抽象数据类型又依照另①抽象数据类型,则必须多个构造函数的嵌

              套调用。

                  Insert into vend_master values (vend_ty());

  1. 指标视图

       借助对象视图能够将面向对象的组织(如抽象数据类型)应用于现有已经

     投入使用的表,而不需重城建总公司体应用程序

B.PL/SQL與T_SQL语法

 

一群處理

  SQL的能力畢竟有限,諸如事務處理方面,批處理於是oracle與ms 都把它進行了擴展,oracle 的擴展叫PL/SQL由评释部分,可举办部分,非常处理局地组成顺序如下:   

Declare declarations

Begin

      Executable statements

      Exception

          Handles

End

   Ms 的擴展叫
Transact_SQL,簡稱T_SQL.

      批处理:正是1遍进行处理壹组命令的进度。GO关键字樗着批处理的利落。

     如use master

        go

      复杂一点也是由3部分組成:注解部分,可进行部分,卓殊处理局地。

     分裂的是,異常處理部分一般用跳轉語句來實現。    

例如:

         Declare declarations

          Begin

             Excutable statements

             IF @ERROR <>0 GOTO ERROR

         End

         ERROR:

            BEGIN

             RAISERROR(20058, 16,
-1)

             
return (1)

           
END

二逻辑控制语句       

   ①. 控制结构:

     Oracle

         If condition then ……..

         End if

         Case selector

          when exp1 then statements

          Else statements

         End case

     SQL SERVER

         IF condition

           Sql statements

         ELSE

           Sql statements

        Case selector

        When ex1 then statements

        Else statements

        End

   2. 迭代结构

       oracle

          Loop statements end loop;

          While condition

          Loop statement end loop;

       Sql server

            While condition

            Begin

              Sql statement

            End

   面象对象编制程序涉及的定义有对象,类,属性和措施,面向对象的叁大特点是:

   封装,继承和多态。

   将数据和函数包装到三个单元中的进程称为封装。不可能从表面访问数据,只好包装在

   类中的这一个函数才能访问数据

   继承能够是SQL类型的继续和艺术的延续。

   多态是三个指标足以表现多种方式的力量,那使得不一致的靶子能够拥有同等的名号

   的措施,那几个点子实现的职务相似,但实现方式却分化。

    3.變量與常量

Pl/sql变量与常量能够具备属性,援救的质量类型有

%type,%rowtype

宣称引用数据库列或变量的数据类型的变量时,能够动用%type属性。如:

Declare

      Variable_name table_name.col_name %type

        使用这几个优点是,不必要明白列vencode的标准数据类型

      %rowtype属性提供表示表中央银行的笔录类型。

     四.過程與函數(Procedure & Function)

       a. 建立存儲過程的語法区别:

           Ms sql 的語法是:

             Create procedure procedure_name

               (

                   @Id int =null,

                   @name varchar(10) out[put]

               )

as

[變量定義區]

begin sql_statement end

——————————————————————–   

             CREATE
FUNCTION function_name (@DATE datetime)

RETURNS
int

AS
begin sql statement end

面向對象的特点之1是封裝,程序包就是对有关PL/SQL类型,子程序,游标,分外,变量,和常量的包装,它包涵两有的程序包规格表达和顺序包主体

在包规格表明书中,能够注解类型,变量,常量,至极,游标,子程序

先后包主体达成在程序包规格中定义的游标、子程序

        包頭語法部分:

Create or replace package package_name is|as

Public type and item declarations

Subprogram specifications

End package_name

實例如下:

Create or replace package pack_me is

Procedure order_proc(orno varchar2);

  Function    order_fun(ornos varchar2) return varchar2;

End pack_me

包體語法部分:

Create or replace package body package_name is|as

Private type and item decarations

Subprogram bodies

End package_name;

         包體具體實例就不寫了,包頭隻是起一個聲明成效,具體實現部分都在包體裡面。

         下边是成立存款和储蓄进程的语法:

          Create [or replace] procedure procedure_name[arg1
in|out|in out]type {is|as}

           [變量定義區]

          Begin

             Execute Sql statement

          Exception handlers

End

         注意:參數列表这裡,oracle是先定義參數是輸入還是輸出參數,然後再定義

參數類型; 而sql server正好相反

         成立函数的语法:

Create function function_name argument

Return datatype is|as

Local decaration

Begin

Excutable statement

Exception

Handles

End;

      b.變量賦值

一.    Oracle里的用法:存款和储蓄进程中边询问边给变量赋值。

select 某1列名 into 变量名 from table where ..;

相当于sql server中的select 变量名=列. From table where ….

注意:select * /某一列名 into 表名

        2.   Oracle 直接赋值的标记是:’ := ‘

  五 觸發器(Trigger)

        Oracle

        Create or replace trigger trigger_name [before/after]

       [insert/update/delete] on table_name

        变量申明

        begin

        Sql statement

        end

Ms sql

Create trigger trigger_name on table

{for |after|instead of} [insert|update|delete] as sql_statements

    六 遊標(Curcor)

        Oracle中提供二种游标类型,它们是静态游标和ref游标

静态游标又分为隐式游标与显式游标

Ref游标,游标变量是①种引用
类型

隐式游标属性包罗%notfound,%found,%rowcount,%isopen

如:

       Begin

                    Delete from ta where ord=’ddd’

               If sql%notfound then

                     Dbms_output.put_line(”未找到值)

              Else

                     Dbms_output.put_line(找到并删除之)

            End if

End

展现游标:能够用上边语句控制游标

      Open cursorname

       Fetch cursor_name into var_name

       Close cursor_name

        创立游标语法:

     Oracle:

       declare variable

       Cursor test is select * from order

    Sql server

       Declare test cursor for select * from order

    柒 .错误处理(Exception & test & debug)

有两系列型的百般:1种预约义,其它一种是用户自定义

預定義的類型有无数,如No_data_found,Cursor_already_open

       對於Oracle的調試,能够借助第2方工具,如toad,Pl.sql
Developer,

       对于sql server采纳 变量可能print 方式展开调节和测试

        Oracle极度定义部分的示范:

            Exception

          When <exception_name> then statements

           When others then

               Statements

           End;

         其中<exception_name>是系统预约义的名字。

       Raiser_application_error用于创设用户定义的错误音信的进程,用户定义的荒唐音讯

     能够钦赐的可怜描述的更详尽

      Sql server在错误处理上多应用自定义。或然是用goto跳转的法门

       如:

        Begin

        Sql statements

        if @error<>0 goto error

        end

        Error:

            Return;

      或是直接用raiserror

      if @error<>0

begin

raiserror(‘产生错误.’,-一,-一)

return (1)

end

好了,两者的要害的反差就写到那,但愿本人表明清楚了,由于东西比较多,所以还有好多现实事物未有写

http://www.cnblogs.com/wangxiaohuo/archive/2008/04/20/1162631.html


 

函数
SQLServer和Oracle的常用函数相比较   一.相对值   S:select abs(-一) value
  O:select abs(-1) value from dual
  2.取整(大)   S:select ceiling(-1.001) value   O:select
ceil(-1.001) value from dual
  3.取整(小)   S:select floor(-1.001) value   O:select
floor(-1.001) value from dual
  4.取整(截取)   S:select cast(-1.002 as int) value   O:select
trunc(-1.002) value from dual
  伍.四舍伍入   S:select round(一.23456,四) value 一.23460   O:select
round(1.23456,四) value from dual 一.234陆
  陆.e为底的幂   S:select Exp(壹) value 二.7182818284590451  O:select Exp(一) value from dual 二.718281八二
  7.取e为底的对数   S:select log(2.718281828459045一) value 1  O:select ln(2.718281828459045一) value from dual; 一
  捌.取拾为底对数   S:select log10(10) value 1   O:select
log(拾,10) value from dual; 1
  9.取平方   S:select SQUARE(4) value 16   O:select power(4,2)
value from dual 16
  10.取平方根   S:select SQLacrosseT(4) value 二   O:select SQXC90T(四) value
from dual 二
  1一.求任意数为底的幂   S:select power(三,肆) value 八一   O:select
power(3,4) value from dual 八一
  12.取随机数   S:select rand() value   O:select
sys.dbms_random.value(0,1) value from dual;
  壹3.取标志   S:select sign(-8) value -一   O:select sign(-8) value
from dual -1   ———-数学函数
  14.圆周率   S:SELECT PI() value 3.1415926535897931   O:不知道
  一5.sin,cos,tan 参数都以弧度为单位   例如:select sin(PI()/二) value
得到1(SQLServer)
  1六.Asin,Acos,Atan,Atan2 再次来到弧度
  17.弧度角度交换(SQLServer,Oracle不知道)   DEGREES:弧度-〉角度
  RADIANS:角度-〉弧度
  ———数值间相比较
  1八. 求集合最大值   S:select max(value) value from   (select 一value   union   select -二 value   union   select 4 value
  union   select 3 value)a
  O:select greatest(1,-2,4,3) value from dual
  19. 求集合最小值   S:select min(value) value from   (select 一value   union   select -二 value   union   select 肆 value
  union   select 3 value)a
  O:select least(1,-2,4,3) value from dual
  20.什么样处理null值(F第22中学的null以10替代)   S:select F一,IsNull(F二,10)
value from Tbl   O:select F1,nvl(F二,拾) value from Tbl
  ——–数值间相比
  21.求字符序号   S:select ascii(‘a’) value   O:select ascii(‘a’)
value from dual
  2贰.从序号求字符   S:select char(九⑦) value   O:select chr(九7)
value from dual
  23.连接   S:select ’11’+’22’+’33’ value   O:select
CONCAT(’11’,’22’)||33 value from dual
  二三.子串位置 –重回叁   S:select CHAOdysseyINDEX(‘s’,’sdsq’,二) value
  O:select INST纳瓦拉(‘sdsq’,’s’,二) value from dual
  贰三.模糊子串的岗位 –重临2,参数去掉中间%则赶回柒   S:select
patindex(‘%d%q%’,’sdsfasdqe’) value
  O:oracle没察觉,可是instr能够经过第6霾问刂瞥鱿执问?B大切诺基>  select
INST凯雷德(‘sdsfasdqe’,’sd’,1,二) value from dual 再次来到6
  24.求子串   S:select substring(‘abcd’,2,2) value   O:select
substr(‘abcd’,2,2) value from dual
  2伍.子串代替 重临aijklmnef   S:SELECT STUFF(‘abcdef’, 二, 3,
‘ijklmn’) value   O:SELECT Replace(‘abcdef’, ‘bcd’, ‘ijklmn’) value
from dual
  二六.子串全体交流   S:没觉察   O:select
Translate(‘fasdbfase瓦斯’,’fa’,’笔者’ ) value from dual
  27.长度   S:len,datalength   O:length
  2八.大小写转换 lower,upper
  2玖.单词首字母大写   S:没觉察   O:select INITCAP(‘abcd dsaf df’)
value from dual
  30.左补空格(LPAD的率先个参数为空格则同space函数)   S:select
space(十)+’abcd’ value   O:select LPAD(‘abcd’,14) value from dual
  3一.右补空格(奥德赛PAD的率先个参数为空格则同space函数)   S:select
‘abcd’+space(十) value   O:select 福睿斯PAD(‘abcd’,1四) value from dual
  3二.删减空格   S:ltrim,rtrim   O:ltrim,rtrim,trim
  3叁. 重新字符串   S:select REPLICATE(‘abcd’,二) value   O:没觉察
  3四.发音相似性相比较(那七个单词再次来到值壹样,发音相同)   S:SELECT
SOUNDEX (‘Smith’), SOUNDEX (‘Smythe’)   O:SELECT SOUNDEX (‘Smith’),
SOUNDEX (‘Smythe’) from dual   SQLServer中用SELECT
DIFFERENCE(‘Smithers’, ‘Smythers’) 比较soundex的差
  再次来到0-4,肆为同音,一高高的
  ————–日期函数
  35.系统时刻   S:select getdate() value   O:select sysdate value
from dual
  3陆.前后几日   直接与整数相加减
  37.求日期   S:select convert(char(10),getdate(),20) value
  O:select trunc(sysdate) value from dual   select
to_char(sysdate,’yyyy-mm-dd’) value from dual
  38.求时间   S:select convert(char(8),getdate(),108) value
  O:select to_char(sysdate,’hh24:mm:ss’) value from dual
  3九.取日期时间的其它一些   S:DATEPA大切诺基T 和 DATENAME 函数
(第3个参数决定)   O:to_char函数 第2个参数决定
  参数———————————下表要求补给   year yy, yyyy
  quarter qq, q (季度)   month mm, m (m O无效)   dayofyear dy, y
(O表星期)   day dd, d (d O无效)   week wk, ww (wk O无效)   weekday
dw (O不晓得)   Hour hh,hh12,hh二4 (hh1二,hh二四 S无效)   minute mi, n (n
O无效)   second ss, s (s O无效)   millisecond ms (O无效)
  ———————————————-
  40.当月最终①天   S:不亮堂   O:select LAST_DAY(sysdate) value
from dual
  41.本星期的某1天(比如周六)   S:不掌握   O:SELECT
Next_day(sysdate,7) vaule FROM DUAL;
  4二.字符串转时间   S:能够直接转或然select cast(‘2004-0玖-0八’as
datetime) value   O:SELECT To_date(‘2004-01-05 22:09:38′,’yyyy-mm-dd
hh24-mi-ss’) vaule FROM DUAL;
  肆三.求二日子某1局部的差(比如秒)   S:select
datediff(ss,getdate(),getdate()+12.三) value
  O:直接用三个日子相减(比如d1-d二=1二.三)   SELECT
(d一-d二)*24*60*60 vaule FROM DUAL;
  44.基于差值求新的日期(比如分钟)   S:select
dateadd(mi,八,getdate()) value   O:SELECT sysdate+8/60/二四 vaule FROM
DUAL;
  45.求差异时区时间   S:不知情   O:SELECT
New_time(sysdate,’ydt’,’gmt’ ) vaule FROM DUAL;
  —–时区参数,香岛在东八区应当是Ydt——-   AST ADT 北冰洋专业时间
  BST BDT 哈得孙湾行业内部时间   CST CDT 中部标准时间   EST EDT
南边标准时间   林大霉素T 格林尼治标准时间   HST HDT
阿Russ加—兰卡威正式时间   MST MDT 山区标准时间   NST 纽芬兰共和国规范时间
  PST PDT 太平洋规范时间   YST YDT YUKON标准时间 
Oracle接济的字符函数和它们的Microsoft SQL Server等价函数:
函数 Oracle Microsoft SQL Server 把字符转换为ASCII ASCII ASCII 字串连接
CONCAT (expression + expression) 把ASCII转换为字符 CH猎豹CS陆 CHA君越重回字符串中的初始字符(左起) INST揽胜 CHA讴歌MDXINDEX 把字符转换为小写 LOWE奥迪Q7LOWE奥德赛 把字符转换为大写 UPPELAND UPPE汉兰达 填充字符串的左手 LPAD N/A
清除起首的空白 LT凯雷德IM LTLX570IM 清除后面部分的空白 CR-VTPAJEROIM 大切诺基TRIM
字符串中的起先进模范式(pattern) INSTPRADO PATINDEX 多次重复字符串 大切诺基PAD
REPLICATE 字符串的话音表示 SOUNDEX SOUNDEX 重复空格的字串 PAJEROPAD SPACE
从数字数据转换为字符数据 TO_CHALAND ST大切诺基 子串 SUBST哈弗 SUBSTWranglerING 替换字符
REPLACE STUFF 将字串中的各类词首字母大写 INITCAP N/A 翻译字符串
TRANSLATE N/A 字符串长度 LENGTH DATELENGTH or LEN 列表中最大的字符串
GREATEST N/A 列表中幽微的字符串 LEAST N/A 假使为NULL则转移字串 NVL
ISNULL
 
日子函数
函数 Oracle Microsoft SQL Server 日期相加 (date column +/- value) or
ADD_MONTHS DATEADD 多少个日子的差 (date column +/- value) or
MONTHS_BETWEEN DATEDIFF 当前几天期和时间 SYSDATE GETDATE()
3个月的末梢1天 LAST_DAY N/A 时区转换 NEW_TIME N/A 日期后的第3个星期天NEXT_DAY N/A 代表日期的字符串 TO_CHAEvoque DATENAME 代表日期的整数
TO_NUMBER (TO_CHATucson)) DATEPA福特ExplorerT 日期舍入 ROUND CONVE奥迪Q3T 日期截断 TRUNC
CONVE奥迪Q5T 字符串转换为日期 TO_DATE CONVEXC90T 若是为NULL则转移日期 NVL
ISNULL
 
更换函数
    函数          Oracle      Microsoft SQL Server 数字转换为字符  
TO_CHARubicon        CONVE大切诺基T 字符转换为数字   TO_NUMBE哈弗      CONVE奇骏T
日期转换为字符   TO_CHARubicon        CONVEENCORET 字符转换为日期  
TO_DATE        CONVEPAJEROT 1陆进制转换为二进制 HEX_TO_RAW    CONVELacrosseT
二进制转换为1陆进制 RAW_TO_HEX    CONVERT
 
别的行级别的函数
      函数           Oracle       Microsoft SQL Server
重返第三个非空表明式 DECODE           COALESCE 当前种类值          
CU汉兰达奥迪Q5VAL            N/A 下一个行列值         NEXTVAL           N/A
倘若exp一 = exp2, 再次回到null DECODE NULLIF 用户登录账号ID数字   
UID            SUSE帕杰罗_ID 用户登录名           USE揽胜           
SUSE奥迪Q7_NAME 用户数据库ID数字      UID            USELX570_ID
用户数据库名         USE智跑            USE安德拉_NAME 当前用户           
CU本田CR-VRENT_USER     CURRENT_USE凯雷德 用户环境(audit trail) USERENV        N/A
在CONNECT BY子句中的级别 LEVEL N/A
 
磋商函数
函数 Oracle Microsoft SQL Server Average AVG AVG Count COUNT COUNT
Maximum MAX MAX Minimum MIN MIN Standard deviation STDDEV STDEV or
STDEVP Summation SUM SUM Variance VARIANCE VAR or VARP
Oracle还有二个实惠的函数EXTRACT,提取并且重临日期时间或时刻间隔表明式中一定的时间域:
EXTRACT(YEA帕杰罗 FROM 日期)

 


 

储存进程
一. 多表连接查询,更新存储进程 Sql存款和储蓄进程 ALTEKuga PROCEDURE [dbo].[
GetEvent]   @SCSWId nvarchar(20)= null ,   @ToDate DATETIME,  
@FromDate DATETIME AS   SELECT NOTES.NOTE_ID,   NOTES.NOTE,  
SCSW_CALENDAR.DATE_TIME    FROM SCSW_CALENDAR   LEFT OUTER JOIN NOTES
ON SCSW_CALENDAR.NOTE_ID=notes.note_id   WHERE
SCSW_CALENDAR.SCSW_ID = SCSWId   ORDER BY Patient.PatientId
Oracel存款和储蓄进程
一.查询数据的贮存进程 PROCEDURE Get伊夫nt(SCSWId IN VA福睿斯CHA福特Explorer2, FromDate IN
DATE, ToDate IN DATE, refOut OUT refcursor) IS BEGIN   OPEN refOut FO奥迪Q3  
select NOTES.NOTE_ID, NOTES.NOTE, SCSW_CALENDAR.DATE_TIME   from
SCSW_CALENDAR   left join NOTES on
SCSW_CALENDAR.NOTE_ID=notes.note_id   where SCSW_CALENDAR.SCSW_ID =
SCSWId   AND SCSW_CALENDAR.DATE_TIME >= FromDate   AND
SCSW_CALENDAR.DATE_TIME < ToDate   order by
SCSW_CALENDAR.DATE_TIME; END GetEvent;
2.立异数据的仓库储存进度: procedure UpdateArticlesubmodel ( ArticleSubID
number, ArticleTitle nvarchar2, ArticleKeyWord nvarchar二, ArticleContent
CLOB, CreatePerson nvarchar2, ChangeDate date, SetTop number,
ArticleSubStyleID number, Checked number ) as begin   update
“ArticleSubModel”   set “ArticleTitle”=ArticleTitle,  
“ArticleKeyWord”=ArticleKeyWord,   “ArticleContent”=ArticleContent,  
“CreatePerson”=CreatePerson,   “CreateDate”=ChangeDate,  
“SetTop”=SetTop,   “ArticleSubStyleID”=ArticleSubStyleID,  
“Checked”=Checked   where “ArticleSubID”=ArticleSubID;   commit;  
Exception when others then   rollback; end UpdateArticlesubmodel;
三.删除数据的囤积过程 procedure DeleteArticlesubmodel ( 阿特icleSubID
number ) as begin   delete from “ArticleSubAccessories”   where
“ArticleSubID”=ArticleSubID;   delete from “ArticleSubModel”   where
“阿特icleSubID”=ArticleSubID;   commit;   Exception when others then  
rollback; end DeleteArticlesubmodel;

 


 

 

一.  top N 难题 在sql server中,top N
难题很容易化解,如下例:从表stbdbdj中甄选排序后的首先行数据开始展览赋值。

在sql中国化学工业进出口总公司解情势很简短,在select 前面加上:top n 即可,个中 n 代表行数。

select top 1 @entrust_date = entrust_date, @entrust_no = entrust_no
from run2k..stbdbdj where entrust_date = @date and entrust_no >
@entrust_no_q and report_status = ‘1’ order by
entrust_date,entrust_no;

在oracle中,未有top
n这些命令,大家应用把两层查询艺术解决:首先,把要求寻找的字段值直接开展排序,然后在外场进行第三遍询问,并使用rownum决定行数。

select entrust_date,entrust_no into @entrust_date, @entrust_no from
( select entrust_date,entrust_no from stbdbdj where entrust_date =
@date and entrust_no > @entrust_no_q and report_status = ‘1’
order by entrust_date,entrust_no ) where rownumber <=1 ;

  1. 怎么着消除结果集重返时,* 和变量同时存在的标题下边例子表示,在用游标重临结果集时,同时再次来到3个变量的值,在 sql server
    中代码如下所示: select a.*,b.organ_id from run2k..stbbp
    a,run2k..stkaccoarg b where a.date = @entrust_date and a.serial_no =
    @serial_no and a.branch_no = b.branch_no and a.exchange_type =
    b.exchange_type;

但在oracle中却未曾那种用法,’*’前面必需跟from。消除措施如下:
一)大家可以把 ‘*’
变成所急需选用的字段,正是说选拔表中要求体现的全套字段表示*。 例如:

open  p_cursor  for select  branch_no,…,organ_id where …
贰)假设那几个字段可能说变量是从其它一张表中取出来的,同样可以接纳上面包车型地铁办法。

open p_cursor for select a.*,b.organ_id; from stkaccoentrust a,
stkaccoarg b where a.branch_no = b.branch_no and a.exchange_type =
b.exchange_type and a.init_date = v_entrust_date and a.serial_no =
v_serial_no;

  1. 外联接难题 sql <—> oracle a = *b <—> a(+)= b a *= b
    <—> a = b(+)

  2. 多条记录求和题材 select sum(A+B+C) into D from … where … group by

单条记录求和 select A+B into C from … where …

  1. case 难点转换 sql: case client_status when ‘0’ then ‘正常’ when ‘1’
    then ‘冻结’ when ‘2’ then ‘挂失’ when ‘3’ then ‘销户’ else ‘未知’ end

oracle:
decode(client_status,’0′,’正常,’1′,’冻结’,’2′,’挂失’,’3′,’销户’,’未知’);

  1. char 和 varchar 类型分歧: char 尾部补空格,varchar 尾巴部分不补空格。

  2. convert转换难题 sql —> oracle convert(char(5),branch_no)
    —> to_char(branch_no,’99999′) convert(char(19),count(*)) —>
    lpad(to_char(count(*)),19) convert(varchar(20),serial_no) —>
    to_char(serial_no,’999…9′ ) 总共20个9 lpad(to_char(serial_no),20)

  3. charindex(substring,string) —> instr(string,substring) 子串 父串
    —> 父串 子串


 

 

 

Oracle中差别 图片 1
SQL SE途达VE卡宴中:
本质上没不相同。只是函数有如:只可以回到3个变量的范围。而存款和储蓄进度可以重临多少个。而函数是能够停放在sql中央银行使的,能够在select中调用,而存款和储蓄进度至极。执行的面目都1模一样。
    
函数限制相比多,比如无法用一时半刻表,只可以用表变量.还有局部函数都不可用等等.而存款和储蓄进程的限定绝对就相比较少
      一.   
壹般的话,存款和储蓄进度达成的功效要复杂一点,而函数的完成的职能针对性比较强。
      二.    对于仓库储存进程来说能够回去参数,而函数只可以再次来到值可能表对象。
      3.   
存款和储蓄进程1般是作为二个独门的部分来实施(EXEC执行),而函数能够当作查询语句的1个部分来调用(SELECT调用),由于函数能够回去1个表对象,由此它能够在查询语句中位居FROM关键字的末端。
      四.    当存款和储蓄进程和函数被实施的时候,SQL Manager会到procedure
cache中去取相应的询问语句,假若在procedure
cache里未有对号入座的查询语句,SQL Manager就会对存款和储蓄进程和函数进行编写翻译。
      Procedure cache中保存的是举行安顿 (execution plan)
,当编写翻译好之后就实施procedure cache中的execution plan,之后SQL
SE奥迪Q7VE瑞鹰会依照各样execution
plan的实际意况来设想是或不是要在cache中保留这几个plan,评判的正统三个是其一execution
plan恐怕被运用的效能;其次是生成这些plan的代价,也便是编写翻译的耗费时间。保存在cache中的plan在下次推行时就绝不再编写翻译了。
sql
server中总结的用法大部分适用于Oracle,在切实的行使进程中,还要看系统贯彻的复杂程度和事实上境况.有经验的DBA对于那四头的使用应当早就领悟于胸了,高手路过还请多多指教!

 

转自:http://www.cnblogs.com/jayhong/archive/2009/08/30/1556642.html

 


 

 

http://blog.163.com/mikelisuper/blog/static/72241886201112745343430/

 

相关文章