--建立表
create table emp (empno number , ename varchar2(32) ,str varchar2(32) );
create or replace trigger emp_trigger
before insert on emp
for each row
declare
--ps+年月日+五位流水號
ps_number varchar2(50); --評審單號
year_month_day varchar2(32);
begin
--查詢最大評審單號 +1 ,得下乙個評審單號
select substr(max(e.str), 3, length(max(e.str)) - 2) + 1
into ps_number
from emp e
where e.str like '%' || 'ps' || to_char(sysdate, 'yyyymmdd') || '%'
order by e.str desc;
--如果查詢的評審單號為空,則從00001開始
if ps_number is null then
select to_char(sysdate, 'yyyymmdd') into year_month_day from dual;
ps_number := year_month_day || '00001';
end if;
--如果插入的資料評審單號為空時,則取新生成的單號
if :new.str is null then
:new.str := 'ps' || ps_number;
end if;
end;
--插入資料測試
insert into emp (empno, ename) values ('10', 'wang莉');
insert into emp (empno, ename) values ('11', 'qq莉2');
insert into emp (empno, ename) values ('12', 'ww莉3');
commit;
--檢視結果,單號已生成插入
oracle 觸發器案例
例1 建立乙個觸發器,當職工表 emp 表被刪除一條記錄時,把被刪除記錄寫到職工表刪除日誌表中去。create table emp his as select from emp where 1 2 create or replace trigger tr del emp before delete ...
oracle序列及觸發器案例
oracle在建立表時和其他的資料庫有點不一樣,如sql server可以在int型別的字段後加上identity 1,1 該字段就會從1開始,按照 1的方式自增,將這個字段設定為主鍵,有利於我們進行資料的插入操作。mysql中可以使用 auto increment 即可。但是oracle有點麻煩,...
ORACLE觸發器 行級觸發器
行級觸發器 本章介紹行級觸發器機制。大部分例子以insert出發器給出,行級觸發器可從insert update delete語句觸發。1 介紹 觸發器是儲存在資料庫已編譯的儲存過程,使用的語言是pl sql,用編寫儲存過程一樣的方式編寫和編譯觸發器。下面在sql plus會話中建立和示例乙個簡單的...