Oracle存储过程
/*不带任何参数存储过程(输出系统日期)*/
create or replace procedure output_date is
begin
dbms_output.put_line(sysdate);
end output_date;
/*带参数in和out的存储过程*/
create or replace procedure get_username(v_id in number,v_username out varchar2)
as
begin
select username into v_username from tab_user where id = v_id; --变量赋值
exception
when no_data_found then
raise_application_error(-20001,'ID不存在!');
end get_username;
1、触发器语法
CREATE [OR REPLACE] TIGGER 触发器名
[before|after] --触发时间
[insert|update|delete] --触发事件
ON 表名
[FOR EACH ROW]
BEGIN
pl/sql语句
END;
其中:
触发器名:触发器对象的名称。
由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
触发时间:指明触发器何时执行,该值可取:
before---表示在数据库动作之前触发器执行;
after---表示在数据库动作之后出发器执行。
触发事件:指明哪些数据库动作会触发此触发器:
insert:数据库插入会触发此触发器;
update:数据库修改会触发此触发器;
delete:数据库删除会触发此触发器。
表 名:数据库触发器所在的表。
for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
2、触发器实例:(使用触发器实现序号自增)
创建一个测试表:
create table tab_user(
id number(11) primary key,
username varchar(50),
password varchar(50)
);
创建一个序列:
create sequence MY_SEQ increment by 1 start with 1 nomaxvalue nocycle cache 20;
创建一个触发器:
create or replace trigger MY_TGR
before insert on tab_user for each row
declare
next_id number;
begin
select MY_SEQ.nextval into next_id from dual;
:new.id:=next_id;
end;
向表插入数据;
insert into tab_user(username,password) values('admin','admin');
insert into tab_user(username,password) values('fgz','fgz');
insert into tab_user(username,password) values('test','test');