Oracle与SQLServer的SQL语法差异

oracle sql server
CREATE OR REPLACE PROCEDURE 存储过程名(参数列表) IS
Begin
 ---存储过程内容
End 存储过程名;
go
--也可将多个存储过程统一放到一个package中,比如
create or replace package 包名 is
  type RtnCursor IS REF CURSOR ; --声明游标,如果包中的对象用不到游标,也可不声明
  PROCEDURE 存储过程名(参数列表);
end 包名;
go
create or replace package body 包名 is
  PROCEDURE 存储过程名(参数列表) is
    局部变量列表;
  begin
        ---存储过程内容
  end 存储过程名;
end 包名;
go
CREATE PROCEDURE 存储过程名 (参数列表) AS
begin
  --存储过程内容
end
go
1、 指定参数类型,但不指定长度
2、  在参数及类型间要加入出标识(IN、OUT),其中,in可省略
比如:
参数1 IN VARCHAR2,
参数2    VARCHAR2,
参数2    OUT NUMBER
1、 指定参数类型,并要指定长度
2、参数名以@作为开头
3、 对于出参需要在类型后面加OUTPUT(或OUT)
比如:
@参数1 VARCHAR(10),
@参数2 int,
@参数3  int output
1、直接使用存储过程名
2、参数在存储过程后面的括号包内列出
3、输出参数不需要使用out进行标识
比如:
存储过程名(参数1,参数2,参数3); --独立的存储过程
包名.存储过程名(参数1,参数2,参数3);--调用包中的存储过程
1、  调用存储过程名前面需要加exec关键字
2、  参数在存储过程后面逐个列出
3、  出参后面要加关键字output或out
比如:
EXEC 存储过程名 参数1的值,参数2的值,@参数3变量 OUTPUT
CREATE OR REPLACE FUNCTION 函数名 (参数列表)
  RETURN 返回值类型 IS
BEGIN
  --函数体
  return 返回值;
END;
--也可将函数放到package包中声明和定义
CREATE  FUNCTION 函数名 (参数列表)
  RETURNs 返回值类型 AS
begin
  --函数内容
  return 返回值
end
1、指定参数类型,但不指定长度
2、在参数及类型间要加入出标识(IN、OUT),in可省略
比如:
参数1 IN VARCHAR2,
参数2  VARCHAR2,
参数3   OUT NUMBER
3、  支持对数据增、删、改操作
4、  支持动态SQL语句
1、指定参数类型,并要指定长度
2、不支持输出参数
比如:
@参数名 VARCHAR(10)
3、  不支持对数据增、删、改操作
4、  不支持动态SQL语句
1、  直接使用函数名
比如:
vResult :=函数名(参数1, 参数2,参数3);
vResult :=包名.函数名(参数1, 参数2,参数3);
1、在函数名前面加上架构名
比如:
Set @result= lcm5719999.函数名(参数1的值, 参数2的值)
1、游标声明: declare cursor 游标名 is select语句
2、使用游标过程: 打开(open 游标名;)->提取(fetch 游标名 into..)->关闭(close 游标;)
3、支持快捷使用游标,直接使用for循环,数据库会自动打开、提取及关闭游标
4、支持引用游标,即声明游标时不指定游标结构,创建游标变量需要两个步骤,声明ref游标类型,并声明ref游标类型的变量,在open游标时才指定游标对应的sql;
5、使用布尔型变量"游标名%found"或"游标名%nofound"来标识最近一次fetch是否成功,用"游标名%isopen"来标识游标是否已经打开;
1、游标声明: declare 游标名 cursor for select语句
2、使用游标过程 打开(open 游标名)->提取(fetch next from 游标名)->关闭(close 游标名)->丢弃(deallocate 游标名)
3、使用int类型的全局变量@@fetch_status控制游标是否正常fetch,其值有以下三种,分别表示三种不同含义:0 fetch成功,-1 fetch 语句失败或此行不在结果集中,-2 被提取的行不存在
1、变量前不可加@符号;
2、存储过程中变量声明不需要declare;
3、变量类型可按表中字段类型动态定义;
比如:
变量1 varchar2(5);
变量2  表名.列名%type;
1、变量前需要加@符号
2、变量声明需要使用Declare关键字
比如: DECLARE @变量1 varchar(5);
3、不支持按表字段类型动态定义
1、变量直接赋值, 变量 := 表达式;
比如: vResult := ‘abcd’;
2、通过SQL语句,Select 表达式 into 变量 from 表
比如: Select col1,col2 into v_col1,v_col2 from table1 Where id = 1000 ; --但当表中没有满足条件的数据时会报""no_data_found""的异常,当表中有多条满足条件的记录时,会报""too_many_rows""异常
3、通过游标,
比如:
declare vCur is select col1,col2 from table1;
begin
  open vCur;
  fetch vCur into v_col1,v_col2;
  close vCur;
end;
1、变量直接赋值,Set 变量=表达式;
比如: Set @result = ‘abcd’
2、通过SQL语句赋值,Select 变量=表达式 from 表
比如: Select @col1=col1,@col2=col2 from table1 where id = 1000 --当表中没有满足条件的数据时变量值为null,当表中有多条满足条件的记录时,变量值为最后一条记录的值
在批查询中的各条SQL语句必须使用分号 ; 作为语句的结束 SQL语句一般不强制要求加分号;作为结束符,但在批查询中,with子句的上一个一句必须要以;结束;批查询直接使用go进行分割
Oracle对字符区分大小写 默认对字符不区分大小写,也可修改数据库配置支持区分大小写
 有序列sequence对象,无自动增长列 无序列对象,表中有自动增长列
alter table 表名 modify 列名 其他属性 alter table 表名 alter column 列名 数据类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值