- 存储过程
实际上是封装在服务器上的一段PLSQL的代码片段,已经编译好的代码
客户端去调用存储过程,执行效率就会很高效
语法:
create {or replace} procedure 存储过程的名称(参数名 in|out 参数类型,参数名 in|out 参数类型)
is | as
–声明部分
begin
–业务逻辑
end;
create or replace procedure proc_updatesal(vempno in number ,vnum in number)
is
--声明变量
vsal number;
begin
select sal into vsal from emp where empno = vempno;
update emp set sal = vasl + vnum where empno = vempno;
commit;
end;
--调用
call proc_updatesal(7788,100);
--调用2
declare
begin
proc_updatesal(7788,100);
end;
- JAVA调用存储过程
JDBC的开发步骤:
1导入驱动包
2注册驱动
3获取连接
4获取执行SQL的statement
5封装参数
6执行SQL
7获取结果
8释放资源
- 触发器:当用户执行了 insert |update | delete 这些操作之后,可以出发一系列其它的动作
作用:在动作执行之前或者之后,出发业务处理逻辑
语法:
create {or replace} triger 触发器的名称
before | after
insert | update | delete
on 表名
{for each row}
declare
…
begin
…
end;
--插入员工之后,输出一句话:欢迎加入黑马程序员
create or replace trigger tri_test1
after
insert
on emp
declare
begin
dbms_output.put_line('欢迎加入黑马程序员');
end;
create or replace trigger tri_test2
before
insert
on emp
declare
--声明变量
vday varchar2(10)
begin
select trim(to_char(sysdate,'day')) into vday from dual;
if vday = 'saturday' then
dbms_output.put_line('不行');
raise application_error(-20001,'出错了');
end if;
end;
触发器的分类
语句级触发器:不管影响多少行,都只会执行一次
行级触发器:影响多少行,触发多少次 for each row
:old 代表旧的记录
:new 代表新的记录
模拟mysql中的ID的自增属性 auto_increment
insert into person values(null,‘张三’);
--序列
create sequence seq_person_pid;
--触发器
create or replace trigger tri_add_person_pid
before
insert
on person
for each row
declare
begin
dbms_output.put_line(:new.pname);
--给新记录的pid赋值
select seq_person_pid.nextval into :new.pid from dual;
end;