日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 建立序列以及触发器的建立

發布時間:2025/3/11 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 建立序列以及触发器的建立 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

筆記系列


序列:序列的創建方法,以及插入數據時的使用;

--序列的創建 create sequence sq increment by 1 start with 1 maxvalue 10 minvalue 1 cycle cache 5--一般(一個序列可以用在多張表,但是一般情況下,一張表對應一個序列) create sequence sq increment by 1 start with 1 nocache nocycle--使用序列的方法 insert into emp(empno,ename) values(sq.nextval,'Tim');--查看數據 select * from emp;


觸發器:

--觸發器:特殊的存儲過程。 --特點:無法直接手動調用,只能自動觸發(由一個動作去觸發)。 --類型:dml觸發器、instead of替代觸發器、系統觸發器 --dml觸發器 --1、語句級(執行操作語句時,只觸發一次) --語法: create or replace trigger tri_XXX 動作 on 表 declare...... begin...... end;--例子:給30號部門的員工集體漲工資200元(觸發一個語句級觸發器)。 --建立觸發器(類似于先把存儲過程建好,等著被調用) create or replace trigger tri_update_emp after update on emp --修改動作完成后執行觸發器 begindbms_output.put_line('漲工資了......'); end; --觸發 update emp set sal=sal+200 where deptno=30;--建立觸發器(類似于先把存儲過程建好,等著被調用) create or replace trigger tri_update_emp before update on emp --修改之前觸發 begindbms_output.put_line('漲工資了......'); end; --觸發 update emp set sal=sal+200 where deptno=30;--2、行級(沒修改一行,都要觸發一次) create or replace trigger tri_update_emp after update on emp --修改動作完成后執行觸發器 for each row begindbms_output.put_line('漲工資了......'); end; --觸發 update emp set sal=sal+200 where deptno=30;--例子 create or replace trigger tri_up_del_ins_emp after delete or insert or update on emp --修改動作完成后執行觸發器 for each row begindbms_output.put_line('觸發了......'); end; --觸發 delete from emp where deptno=30;--條件謂詞(布爾類型):inserting 、updating、 deleting create or replace trigger tri_up_del_ins_emp after delete or insert or update on emp --修改動作完成后執行觸發器 for each row beginif inserting thendbms_output.put_line('又來新人了,oo......');elsif updating thendbms_output.put_line('修改了,能行不......');elsedbms_output.put_line('被開除了......');end if;end; --觸發 delete from emp where deptno=30;--實例:簡易圖書管理系統 select * from book; select * from borrow; --增加一列 alter table book add countOfBook integer check(countOfBook>=0); --完成借書功能,需要borrow表插入一行,book表對應書籍庫存-1。 --問題1、觸發器建在哪個表上? borrow --問題2、怎么把插入borrow表的數據傳給book? :NEW --*****行級觸發器,自帶了兩個特殊變量 -- :new --自動存放新插入的數據記錄(一行數據),和修改之后的記錄行 -- :old --自動存放被刪除的數據記錄(一行數據),和修改之前的記錄行 --例子 create or replace trigger tr_up_emp after update on emp for each row begindbms_output.put_line(:old.ename||:old.sal);dbms_output.put_line(:new.ename||:new.sal); end; --觸發 update emp set ename='ao-smith',sal=250 where ename='SMITH';SELECT * FROM book; --實現借書功能 --第一步: 在borrow上建立觸發器,用來自動修改book表 create or replace trigger tri_in_borrow after insert on borrow for each row beginupdate book set countOfBook=countOfBook-1where bid=:new.bid; end; --第二步:只需在borrow中插入數據就OK insert into borrow values('T013','1002','B003',sysdate,null);--作業:P322 11、12, 上面例子中的借書功能

instead of 觸發器:

--instead of(觸發動作,實質上不執行,真正執行的只有觸發器) --視圖:固化的查詢,存儲在服務器上。view里面不可能有數據 --它只是一個被存起來的查詢,操作時類似于表。 create view scott.v_emp as select empno,ename,dname from emp natural join dept; --emp\dept叫做視圖的基表select * from v_emp; --實質是調用了存在其里面的那個查詢語句create or replace trigger tri_v_emp instead of insert on v_emp for each row begin--獲取部門編號insert into emp(empno,ename,deptno)values(:new.empno,:new.ename,(select deptnofrom dept where dname=:new.dname)); end;insert into v_emp values(9999,'TT','SALES');

觸發器和序列:記錄數據庫的登陸信息;

--instead of --view 沒有數據,里面存放的是查詢語句 --通過view可以修改基表,只能修改查詢中涉及到的列,但是可以通過觸發器的:new或者:old獲取可以修改的數據, --然后再去修改基表中的其他列--view create or replace view scott.v_view as select * from emp;--可以查看一下view select * from v_view;--修改視圖 create or replace--刪除視圖 drop view scott.v_view;--觸發器--不能獨立存在,必須依附于表或者視圖,只有對它的載體有操作,觸發器才會執行 --dml --instead of--系統觸發器(相關于系統級別的操作所能觸發的觸發器) --database create table t_log (id integer primary key,username varchar2(20),log_time date )--建立一個觸發器用來記錄登錄信息 create or replace trigger tri_log after logon on database begininsert into t_logvalues(sq_log.nextval,user,sysdate); end;drop trigger tri_log; --觸發 select * from t_log;--有個自動增長列 --序列:可以提供連續數據的oracle對象。 --語法:create sequence sq_log increment by 1 start with 1;--序列自帶兩個特殊變量 select sq_log.nextval from dual;insert into t_log values(sq_log.nextval,user,sysdate);create table t_log1 (id integer primary key,username varchar2(20),log_time date )insert into t_log1 values(sq_log.nextval,user,sysdate);


總結

以上是生活随笔為你收集整理的Oracle 建立序列以及触发器的建立的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。