zoukankan      html  css  js  c++  java
  • Oracle 和 Sql service 区别

    我主要用过的数据库为Oracle10g和SqlServer2008,通过实际运用和查阅资料整理如下:

    主题

    Oracle 10g

    SQLServer 2008

    存储过程格式

    Create Or Replace Procedure 存储过程名 (参数列表)

    IS

    Begin

         ---存储过程内容

    End 存储过程名;

    Create Procedure 存储过程名  (参数列表)

    AS

    Begin

        --存储过程内容

    End

    存储过程参数

    1、指定参数类型,但不指定长度;

    2、在参数及类型间要加入输入输出标识(in 、out);

    eg:  param  in  int

    1、指定参数类型,并指定长度;

    2、输出参数需要在类型后面加输出标识(output 或 out)

    eg:  @param  nvarchar(10)  out

    使用存储过程

    1、直接使用存储过程名;

    2、在存储过程后面的括号内列出参数;

    eg:  proc_GetList (param1 , param2);

    1、关键字Exec,存储过程名;

    2、参数在存储过程后面逐个列出,输出参后面要加输出标识(output 或 out);

    eg:  Exec proc_GetList  @param1, @param2 out

    自定义函数格式

    Create  Or  Replace  Function  函数名 (参数列表)

    Return  返回值  --可为参数  或类型(nvarchar(10))

    Is

    Begin

        --函数内容

    End

    Create  Function 函数名 (参数列表)

    Returns  返回值类型

    AS

    Begin

        --函数内容

    End

    自定义函数内容

    1、指定参数类型,但不指定长度;

    2、在参数及类型间要加入输入输出标识(in 、out);

    eg:  param  in  int

    3、支持对数据增、删、改操作

    4、支持动态SQL语句

    1、指定参数类型,并指定长度;

    2、输出参数需要在类型后面加输出标识(output 或 out)

    eg:  @param  nvarchar(10)  out

    3、不支持对数据增、删、改操作

    4、不支持动态SQL语句

    使用自定义函数

    1、直接使用函数名名称

    eg:  result  := func_isandbegin(flow_id, step_id)

    1、在函数名前面加上dbo.

    eg:  Set   @result = dbo.func_isandbegin(@flow_id,   @step_id)

    游标

    1、游标声明  Declare Cursor 游标名 is select语句

    2、使用游标过程   打开(open)->提取(fetch)->关闭(close)

    3、支持快捷使用游标,直接使用for循环,数据库会自动打开、提取及关闭游标

    1、游标声明  Declare 游标名 cursor  for   select语句

    2、使用游标过程   打开(open)->提取(fetch)->关闭(close)->销毁

    变量

    1、变量前不可加@符号;

    2、存储过程中变量声明不需要declare;

    eg:  param  nvarchar(5);

    3、 变量类型可按表中字段类型动态定义

    eg:   _id    tableName.id%type;

    1、变量前需要加@符号;

    2、变量声明需要使用Declare关键字;

    eg:  Declare  @param nvarchar(5);

    3、不支持按表字段类型动态定义  

    赋值

    1、变量直接赋值,变量 := 表达式;

    eg:  result := 'abcd';

    2、通过SQL语句 : Select 表达式 into 变量 from 表

    eg:  Select code,name into _code,_name   from tableName  where id = 10;

    1、变量直接赋值,Set 变量 = 表达式;

    eg:  Set @result = 'abcd'

    2、通过SQL语句赋值 : Select 变量 = 表达式 from 表

    eg:  Select @code=code,@name=name from   tablename where id = 10

    语句结束符

    SQL语句使用分号 ; 作为语句的结束

    SQL语句不需要加分号;作为结束符(加也可)

    大小写

    Oracle对字符区分大小写

    默认对字符不区分大小写,也可修改数据库配置支持区分大小写

    序列

    1、有序列sequence对象,无自动增长列

    1、 无序列对象,表中有自动增长列 identity(1,1)

    Select 语法

    1、结果集可做为表使用,使用时可不加别名

    eg:  Select * from (select * from tab1)

    2、虚表 dual的使用,对于select计算某些与实体表无关的表达式时,要使用虚表dual

    eg:  Select   round(1/3,2) from dual ;  

    1、结果集可做为表使用,使用时必须加别名

    Eg: Select * from (select * from tab1) a

    2、对于Select计算某些与实体表无关的表达式时,可使用不带from的select语句

    eg: Select round(1/3,2) ; 

    Update语法

    不可关联表更新

    eg:

    For cur in (select a.id,b.value from a

       inner   join b on a.id = b.id ) loop

       Update   a set a.value = cur.value

       Where   a.id = cur.id;

    End loop;

    Update a set a.value = (select b.value

    From b where b.id = a.id )

    可关联表更新

    Eg:

    Update a set a.value = isnull(b.value,'')

    From a

    inner join b on a.id = b.id

    Update a set a.value = isnull(b.value,'')

    From b where a.id = b.id

    Delete语法

    不可关联表删除

    eg: Delete a where exists (select b.id from b   where a.id = b.id )

    可关联表删除

    eg:  Delate a  From a  Inner join b on a.id = b.id

    动态SQL语句

    1、普通动态SQL语句

    Begin

    Execute immediate 'update tab1 set   column1=5';

    End;

    用变量替换SQL语句

    V_sql := ‘update tab1 set column1=5’

    Execute immediate v_sql;

    2、 带出参动态SQL语句

    n_count number(10);

    v_sql varchar2(max);

    v_sql :=' select count(*) from tablename ';

    execute immediate v_sql  into  n_count;

    3、动态存储过程(带入、出参)

    v_sql := 'begin  proc_test   (:v1,:v2,:v3); end;'

    execute immediate v_sql

    using in v_code,in v_name,out v_result ;

    注:proc_test为存储过程名

    1、普通动态SQL语句

    exec('update tab1 set column1 = 5')

    exec sp_executesql N'select * from   tableName' -- 字符串前一定要加N

    用变量替换SQL语句

    Declare @sql Nvarchar(max)

    Set @sql='select * from tableName'

    exec sp_executesql @sql

    2、 带出参动态SQL语句

    declare @count int

    declare @sqls nvarchar(max)

    set @sqls='select @a=count(*) from   tableName '

    exec sp_executesql @sqls,N'@a int   output',@count output

    3、动态存储过程(带入、出参)

    Declare  @result nvarchar(50),

                 @sql nvarchar(max),

                 @para nvarchar(200);

    Set @sql = 'proc_test   @code,@name,@result output'

    Set @para = '@code nvarchar(10),@name  nvarchar(10),@result nvarchar(50) output'

    EXEC sp_executesql @sql,@para,'001','张三',@result OUTPUT

    注:proc_test 为存储过程名

    TOP用法

    1、在Oracle中采用伪列rownum 获取结果集中排在前面的部分记录

    eg: 返回结果集中前10条记录

    Select * from tableName where rownum <=10

    Rownum可使用<、<=符号,不可使用>、>=符号,如果使用=号只可=1

    2、Rownum列还常用于形成结果集的顺序号,从而可获取一定序号范围的行

    eg: 获取按code排名第10到20行

    Select * from (Select a.*,rownum as nrow   from tab01 a order by code) where nrow between 10 and 20

    1、SQLServer中采用top方式获取结果集排在前面的部分记录

    Eg:返回结果集中前10条记录

    Select    top 10 * from sysc01

    2、sqlserver可通过ROW_NUMBER()排名函数实现

    eg: 获取按code排名第10到20行

    Select a.* From (Select a.*, ROW_NUMBER() OVER( Order By a.code ) As nrow From tab01  a) a where nrow between 10   and 20

    IF…

    Else

    流控制

    IF 条件表达式 then

      {语句块}

    Else

      {语句块}

    End if ;

    IF 条件表达式

      {语句块}

    Else

      {语句块}

    End

    如果语句块中有多于1条SQL语句,则必须要使用begin … end 构造

    Case 用法

    1、表达式 : Case 表达式 when 匹配表达式 then 结果表达式1 else 结果表达式2 end

    eg:

    Select case name when '张三' then 1 when '李四' then 2 else 0   end

    From person

    或  Case when 条件表达式 then 结果表达式1 else 结果表达式2 end

    eg:

    Select case when name='张三' then 1 when name='李四' then 2 else 0   end

    From person

    2、流控制语句

    流控制与表达式结构很相似,只是结果表达式换成语句块

    Case 表达式 when 匹配表达式 then {语句块1} else {语句块2} end case;

    eg:

    case v_name  when '张三' then  v_number := 1; when '李四' then v_number:=2;

    else

    v_number:=0  end case;

    或  Case when 条件表达式 then {语句块1} else {语句块2} end case;

    eg:

    case  when v_name = ‘张三’ then  v_number := 1;  when v_name = ‘李四’ then

    v_number:=2;

    else  v_number:=0  end case;

    1、  case表达式

    同Oracle

     2、不支持流控制

    临时表

    1、临时表结构需要象实体表一样事先定义后再在SQL脚本中使用,临时表名与实体表名规则一样

    eg:

    create temporary table WFMW02

    ( paraid number(9),

      vvalue nvarchar2(50),

      flowid number(9),

      id     number(9))

    on commit delete rows;

    1、  临时表是在执行数据库脚本会话过程中创建并使用,临时表名前面带有#号(或##全局临时表)

    eg:

    create table #WFMW02

    ( paraid int,

      vvalue nvarchar(50),

      flowid int,

      id     int)

    临时表也可在使用过程中自动创建

    Select paraid,vvalue,flowid,id

    into #wfmw02

    from wfmb01c

    常用函数

    1、nvl(表达式1,表达式2); --表达式1为空返回表达式2

    2、sysdate  --系统时间

    3、instr(字符表达式1,字符表达式2 [,pos][,nth])

    从“表达式1”的“pos”位置搜索第“nth”个“表达式2”的位置(若未找到则返回0)

    4、To_char(),to_date(),to_number()

    1、isnull(表达式1,表达式2)

    2、getdate()

    3、CHARINDEX(字符表达式1,字符表达式2 [,pos])

    从“表达式2”的“pos”位置搜索“表达式1”并返回“表达式1”的起始位置(若未找到则返回0)

    4、convert(),cast()

    运算符

    字符相加 ||

    eg:     'A' || 'B' = 'AB'

    字符相加 +

    eg:     'A' + 'B' = 'AB'

    null

    对于字符型数据,空串等同于NULL

    对于字符型数据,空串不同于null

    反思 空杯 担当
  • 相关阅读:
    nginx教程2:日志
    3.1.1 基于监听的事件处理机制
    示例(1)按键和文本框监听
    2.3.3 Button(按钮)与ImageButton(图像按钮)
    2.3.2 EditText(输入框)详解
    2.3.1 TextView(文本框)详解
    2.2.3 TableLayout(表格布局)
    2.2.2 RelativeLayout(相对布局)
    2.2.1 LinearLayout(线性布局)
    2.1 View与ViewGroup的概念
  • 原文地址:https://www.cnblogs.com/oralig/p/10370982.html
Copyright © 2011-2022 走看看