ORACLE 存储过程语法归纳
2017-04-20 10:47
369 查看
1、创建存储过程
create or replace procedure test(var_name_1 in type,var_name_2 out type) as --声明变量(变量名变量类型)
begin
--存储过程的执行体
end test;
打印出输入的时间信息
E.g:
create or replace procedure test(workDate in Date) is
begin
dbms_output.putline(The input date is:||to_date(workDate, yyyy-mm-dd));
endtest;
2、变量赋值
变量名:=值;
E.g:
create or replace procedure test(workDate in Date) is x number(4,2);
begin
x:=1;
end test;
3、判断语句:
if 比较式 then begin end;end if;
E.g
create or replace procedure test(x in number) is
begin
if x >0 then
begin x := 0 - x;
end;
end if;
if x = 0 then
begin
x: = 1;
end;
end if ;
end test;
4、For 循环
For ... in ... LOOP
--执行语句
end LOOP;
(1)循环遍历游标
create or replace procedure test() as
Cursor cursor is select name from student;
name varchar(20);
begin
for name in cursor LOOP
begin
dbms_output.putline(name);
end;
end LOOP;
end test;
(2)循环遍历数组
create or replace procedure test(varArray in myPackage.TestArray) as
--(输入参数 varArray 是自定义的数组类型,定义方式见标题 6)
i number;
begin
i := 1;
-- 存储过程数组是起始位置是从 1 开始的,与 java、C、C++等语言不同。因为在Oracle中本是没有数组的概念的,数组其实就是一张
-- 表(Table),每个数组元素就是表中的一个记录,所以遍历数组时就相当于从表中的第一条记录开始遍历
for i in 1..varArray.count LOOP
dbms_output.putline(The No.|| i ||record in varArray is: ||varArray (i));
end LOOP;
end test;
5、While 循环
while 条件语句 LOOP
begin
end;
end LOOP;
E.g
create or replace procedure test(i in number) as
begin
while i < 10 LOOP
begin
i=i+i;
end ;
end LOOP;
end test;
6 数组
首先明确一个概念:Oracle 中本是没有数组的概念的,数组其实就是一张表(Table),每个数组元素就是表中的一个记录。使用数组时,用户可以使用Oracle已经定义好的数组类型,或可根据自己的需要定义数组类型。
(1)oracle 自带数组类型
X:array -- 使用oracle自带类型初始化
EG :
create or replace procedure test(y out array) is
X:array ;
begin
x :=new Array();
y :=x ;
end test ;
(2)自定义类型(自定义数据类型时,建议通过创建Package的方式实现,以便于管理)
E.g(自定义使用参见标题4.2)
create or replace package myPackage is
type info is recode(name in varchar(20), y in number) ; -- public type declarations
type tetsArray is table of info index by binary_integer ; --此处声明了一个testArray的数据类型,其实其位是一张存储info数据类型的table而已,以及testArray就是一张表字分别
--是name和y,并且使用了Index by binary_integer 作为索引,可以不写(type testArray is table of info),但是如果不
--写的话使用数组时就要进行初始化
-- varArray myPackage.testArray ;
-- varArray := new myPackage.testArray();
end testArray ;
7 游标的使用
Oracle中Cursor是非常有用的,用于遍历临时表中的查询结果。其相关方法和属性也很多,现仅就常用的用法做一二介绍:
(1)Cursor 类型的游标(不能用于参数传递)
create or replace procedure test() is
--使用方式一
cursor_1 Cursor is select std_name from student_table where ...
-- 使用方式二
cursor_2 Cursor
begin
select std_name into cursor_2 from student_table where ...
可使用For x in cursor LOOP ....end LOOP; 来实现对Cursor的遍历
end;
(2)SYS_REFCURSOR型游标,该游标是Oracle以预先定义的游标,可作出参数进行传递
create or replace procedure test (rscursor out SYS_REFCURSOR) as
cursor SYS_REFCURSOR , name varchar(20);
begin
open cursor for select name for table where ....
-- SYS_REFCURSOR 只能通过 open for的方式来打开和赋值
LOOP
fetch cursor into name exit when cursor%NOTFOUND -- SYS_REFCURSOR 只能通过fetch into 来打开和遍历 ,SYS_REFCURSOR中可使用三个状态属性:
---%NOTFOUND(未找到记录信息) %FOUND(找到记录信息) ---%ROWCOUNT(然后当前游标所指向的行位置)
dbm_output.putline(name);
end LOOP;
rscursor:=cursor;
end test;
下次写列子:
create or replace procedure test(var_name_1 in type,var_name_2 out type) as --声明变量(变量名变量类型)
begin
--存储过程的执行体
end test;
打印出输入的时间信息
E.g:
create or replace procedure test(workDate in Date) is
begin
dbms_output.putline(The input date is:||to_date(workDate, yyyy-mm-dd));
endtest;
2、变量赋值
变量名:=值;
E.g:
create or replace procedure test(workDate in Date) is x number(4,2);
begin
x:=1;
end test;
3、判断语句:
if 比较式 then begin end;end if;
E.g
create or replace procedure test(x in number) is
begin
if x >0 then
begin x := 0 - x;
end;
end if;
if x = 0 then
begin
x: = 1;
end;
end if ;
end test;
4、For 循环
For ... in ... LOOP
--执行语句
end LOOP;
(1)循环遍历游标
create or replace procedure test() as
Cursor cursor is select name from student;
name varchar(20);
begin
for name in cursor LOOP
begin
dbms_output.putline(name);
end;
end LOOP;
end test;
(2)循环遍历数组
create or replace procedure test(varArray in myPackage.TestArray) as
--(输入参数 varArray 是自定义的数组类型,定义方式见标题 6)
i number;
begin
i := 1;
-- 存储过程数组是起始位置是从 1 开始的,与 java、C、C++等语言不同。因为在Oracle中本是没有数组的概念的,数组其实就是一张
-- 表(Table),每个数组元素就是表中的一个记录,所以遍历数组时就相当于从表中的第一条记录开始遍历
for i in 1..varArray.count LOOP
dbms_output.putline(The No.|| i ||record in varArray is: ||varArray (i));
end LOOP;
end test;
5、While 循环
while 条件语句 LOOP
begin
end;
end LOOP;
E.g
create or replace procedure test(i in number) as
begin
while i < 10 LOOP
begin
i=i+i;
end ;
end LOOP;
end test;
6 数组
首先明确一个概念:Oracle 中本是没有数组的概念的,数组其实就是一张表(Table),每个数组元素就是表中的一个记录。使用数组时,用户可以使用Oracle已经定义好的数组类型,或可根据自己的需要定义数组类型。
(1)oracle 自带数组类型
X:array -- 使用oracle自带类型初始化
EG :
create or replace procedure test(y out array) is
X:array ;
begin
x :=new Array();
y :=x ;
end test ;
(2)自定义类型(自定义数据类型时,建议通过创建Package的方式实现,以便于管理)
E.g(自定义使用参见标题4.2)
create or replace package myPackage is
type info is recode(name in varchar(20), y in number) ; -- public type declarations
type tetsArray is table of info index by binary_integer ; --此处声明了一个testArray的数据类型,其实其位是一张存储info数据类型的table而已,以及testArray就是一张表字分别
--是name和y,并且使用了Index by binary_integer 作为索引,可以不写(type testArray is table of info),但是如果不
--写的话使用数组时就要进行初始化
-- varArray myPackage.testArray ;
-- varArray := new myPackage.testArray();
end testArray ;
7 游标的使用
Oracle中Cursor是非常有用的,用于遍历临时表中的查询结果。其相关方法和属性也很多,现仅就常用的用法做一二介绍:
(1)Cursor 类型的游标(不能用于参数传递)
create or replace procedure test() is
--使用方式一
cursor_1 Cursor is select std_name from student_table where ...
-- 使用方式二
cursor_2 Cursor
begin
select std_name into cursor_2 from student_table where ...
可使用For x in cursor LOOP ....end LOOP; 来实现对Cursor的遍历
end;
(2)SYS_REFCURSOR型游标,该游标是Oracle以预先定义的游标,可作出参数进行传递
create or replace procedure test (rscursor out SYS_REFCURSOR) as
cursor SYS_REFCURSOR , name varchar(20);
begin
open cursor for select name for table where ....
-- SYS_REFCURSOR 只能通过 open for的方式来打开和赋值
LOOP
fetch cursor into name exit when cursor%NOTFOUND -- SYS_REFCURSOR 只能通过fetch into 来打开和遍历 ,SYS_REFCURSOR中可使用三个状态属性:
---%NOTFOUND(未找到记录信息) %FOUND(找到记录信息) ---%ROWCOUNT(然后当前游标所指向的行位置)
dbm_output.putline(name);
end LOOP;
rscursor:=cursor;
end test;
下次写列子:
相关文章推荐
- oracle 存储过程基本语法
- oracle 存储过程的基本语法 及注意事项(转)
- ORACLE Procedure 存储过程语法
- oracle 存储过程基本语法
- oracle 存储过程的基本语法
- oracle的存储过程基本语法
- Oracle存储过程的基本语法
- Oracle存储过程基本语法
- oracle 存储过程的基本语法
- Oracle存储过程基本语法及基础教程
- Oracle存储过程基本语法与基础教程(简明清楚且附实例)
- oracle 存储过程的基本语法
- oracle 存储过程的基本语法
- Oracle存储过程基本语法
- oracle 存储过程的基本语法 及注意事项
- oracle 存储过程的基本语法 及注意事项
- oracle 存储过程的基本语法
- Oracle存储过程基本语法
- oracle 存储过程的基本语法 及注意事项
- oracle的存储过程语法(转)