Oracle——创建存储过程

有个超级详细的关于存储过程的帖子:https://www.cnblogs.com/snowballed/p/6766867.html

Oracle-存储过程(procedure、function、package、tigger)
1、过程procedure
(1)创建过程

create [ or replace ] procedure 过程名称 [ ( 参数列表) ] { is | as }

----声明变量

begin

----执行代码

end [过程名称];

例如:
create or replace procedure myproc
as

m number;

begin

m:=100;
dbms_output.put_line(m);

end;

(2)调用过程

exec 存储过程名称 [ (参数) ]

execute 存储过程名称 [ (参数) ]

begin

----存储过程名称 [ (参数) ]

end

(3)删除过程

drop procedure 过程名称 

(4)获取过程返回值
过程的返回值,out参数都是可以获取的

2、函数function
(1)创建函数

create [ or replace ] function 函数名称 [ (参数列表) ] return 返回值类型

{ is | as }

----声明变量

begin

----执行代码

end [函数名称]; 

(2)调用函数

declare

----创建变量存储函数调用返回值

begin

----调用函数赋值给变量

end; 

(3)删除函数

drop function 函数名称 

(4)获取函数返回值
函数的返回值,out参数都是可以获取的

注意:过程和函数的区别
①函数至少返回一个变量,而过程可以返回多个,也可以不返回。
函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。
②函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.
而过程的限制相对就比较少。
③对于过程来说可以返回参数,而函数只能返回值或者表对象。
④存储过程一般是作为一个独立的部分来执行(EXEC执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),
由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。

3、包和包体
(1)创建包

create [ or replace ] package 包名称 is | as

----定义公用常量、变量、过程、函数等(不能有具体实现)

end [ 包名称 ]; 

(2)创建包体

create [ or replace ] package body 包名称 is | as

----定义公用常量、变量、过程、函数等

----实现公用过程和函数

end [ 包名称 ];

(3)调用包

declare

----定义变量

begin

----包名.元素名称(参数)

end

(4)删除包和包体

drop package [ body ] [ user. ] 包名

4、触发器tigger
(1)创建触发器

create [or replace] tigger 触发器名 { before | after } { insert | update | delete }

on 表名 ---- 数据库触发器所在的表。

[for each row] ---- 对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。

begin

----pl/sql语句

end

(2)删除触发器

drop tigger 触发器名称

(3)禁用所有触发器

ALTER SYSTEM SET "_system_trig_enabled"=false;

转自:https://yq.aliyun.com/articles/675844

原文地址:https://www.cnblogs.com/shujk/p/12601477.html