存储过程
create or replace
procedure 过程名(参数列表)
as[is]
plsql程序体
调用的方法:
1.exec 过程名
2.另外一个存储过程中调用
存储函数
create or replace
function 函数名(参数)
return 返回值类型
is[as]
--声明
plsql程序体
create or replace function myfunction(pno in number)
return number --指定返回值的类型
as
msal emp.sal%type;
begin
select sal into msal from emp where empno = pno;
return msal;
end myfunction;
注意:
一般在只有一个返回值的时候使用存储函数,在有多个返回值的时候使用存储过程,可以在参数中指明是in还是out
包结构
声明包结构:(只负责声明,不负责实现)
create or replace package xxx
as
type xxx is ref xxx--自定义一个类型
end xxx;
创建包体
create or replace package body xxx
as
begin
包体里面需要实现包里面所有的存储过程和存储函数
create or replace package mypackage
as
type mycursor is ref cursor;
--声明一个存储过程,查询指定部门的所有员工信息
procedure emplist(dno in number,testcursor out mycursor);
end mypackage;
create or replace package body mypackage
as
procedure emplist(dno in number,testcursor out mycursor)
as
begin
--关键字for代表是哪一个集合
open testcursor for select * from emp where deptno=dno;--打开游标
end emplist;
end mypackage;
触发器
作用:
- 安全性检查
- 数据确认
- 审计,跟踪表上所作的数据操作
- 数据的备份和同步
查询触发器、过程、函数
select * from user_triggers;
select * from user_source;
create [or replace] trigger 触发器名
before| after
{update [of 列名] | insert | delete}
on 表名
[for each row when(条件) ]如果写了就是行级触发器,没写就是语句触发器,行级针对每行,语句针对表
plsql程序
create or replace trigger mytrigger
before insert
on emp
for each row
declare
begin
dbms_output.put_line('插入成功');
end;
/