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 列名 数据类型 |
Oracle与SQLServer的SQL语法差异
于 2024-04-24 08:48:00 首次发布