存储过程

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;
/