Oralce数据库之存储过程、存储函数、触发器和数据字典
Oracle數(shù)據(jù)庫總結(jié)
Oracle數(shù)據(jù)庫之集合運(yùn)算
Oracle數(shù)據(jù)庫之?dāng)?shù)據(jù)處理
Oracle數(shù)據(jù)庫之建表和管理表
Oracle數(shù)據(jù)庫之對(duì)象視圖、索引、序列、同義詞
一、存儲(chǔ)過程和存儲(chǔ)函數(shù)
1、概念
存儲(chǔ)在數(shù)據(jù)庫中供所有用戶程序調(diào)用的子程序,稱為存儲(chǔ)過程或者存儲(chǔ)函數(shù)
2、存儲(chǔ)過程語法
create [or replace] procedure 過程名(參數(shù)列表) asplsql子程序體實(shí)例1:
create or replace procedure sayhelloworld as--說明部分 begindbms_output.put_line('Hello World'); end; /實(shí)例2:
--給指定的員工漲500,并且打印漲前和漲后的薪水 create or replace procedure raiseSalary(eno in number) as--定義變量保存漲前的薪水psal emp.sal%type; beginselect sal into psal from emp where empno=eno;update emp set sal = sal+500 where empno=eno;dbms_output.put_line('漲前:'||psal||' 漲后:'||(psal+100));end; /3、存儲(chǔ)函數(shù)
函數(shù)為一命名的存儲(chǔ)程序,可帶參數(shù),并返回一個(gè)計(jì)算值。函數(shù)和存儲(chǔ)過程類似,但函數(shù)必須return子句用于返回值。函數(shù)說明必須指定函數(shù)名、結(jié)果值的類型和參數(shù)類型。
語法結(jié)構(gòu)
create [or replace] function 函數(shù)名(參數(shù)列表) return 函數(shù)值類型 as plsql子程序體實(shí)例1:
--查詢某個(gè)員工的年收入 create or replace function queryempincome(eno in number) return number as--月薪和獎(jiǎng)金psal emp.sal%type;pcomm emp.comm%type; beginselect sal,comm into psal,pcomm from emp where empno=eno;--返回年收入return psal*12+nvl(pcomm,0); end; /實(shí)例2:
create or replace procedure queryempinfo(eno in number,pename out varchar2,psal out number,pjob out varchar2) as beginselect ename,sal,empjob into pename,psal,pjob from emp where empno=eno;end; /二、觸發(fā)器
1、概念
數(shù)據(jù)庫觸發(fā)器是一個(gè)與表相關(guān)聯(lián)的、存儲(chǔ)的pl/sql程序。每當(dāng)一個(gè)特定的數(shù)據(jù)操作語句(insert、delete、update)在指定的表上發(fā)出時(shí),oracle自動(dòng)的執(zhí)行觸發(fā)器中定義的語句序列。
2、觸發(fā)器的類型
1)語句級(jí)觸發(fā)器
在指定的操作語句之前或者是之后執(zhí)行一次,不管這條語句影響了多少行。
2)行級(jí)觸發(fā)器(for each row)
觸發(fā)語句作用的每一條語句都會(huì)觸發(fā)。
3、觸發(fā)器語法
create [or replace] trigger 觸發(fā)器名 {before|after} {delete|insert|update[of 列名]} on 表名 [for each row [when(條件)]] pl/sql語句塊實(shí)例1:
--成功插入新員工后,自動(dòng)打印“very good”create or replace trigger saynewemp after insert on emp declare begindbms_output.put_line('very good'); end; /實(shí)例2:
/*漲后的工資不能少于漲前的工資 */ create or replace trigger checksalary before update on emp for each row begin--if 漲后的薪水 < 漲前的薪水 thenif :new.sal < :old.sal thenraise_application_error(-20002,'漲后的工資不能少于漲前的工資。漲前:'||:old.sal||' 漲后:'||:new.sal);end if;end; /三、數(shù)據(jù)字典
1、數(shù)據(jù)字典介紹
oracle數(shù)據(jù)字典是有表和視圖組成的,存儲(chǔ)有關(guān)數(shù)據(jù)庫結(jié)構(gòu)信息的一些數(shù)據(jù)庫對(duì)象。數(shù)據(jù)庫字典描述了實(shí)際數(shù)據(jù)是如何組織的。對(duì)它們可以象處理其他數(shù)據(jù)庫表或視圖一樣進(jìn)行查詢,但不能進(jìn)行任何修改。
Oracle數(shù)據(jù)庫字典通常是在創(chuàng)建和安裝數(shù)據(jù)庫時(shí)被創(chuàng)建的,Oracle數(shù)據(jù)字典是Oracle數(shù)據(jù)庫系統(tǒng)工作的基礎(chǔ),沒有數(shù)據(jù)字典的支持,Oracle數(shù)據(jù)庫系統(tǒng)就不能進(jìn)行任何工作。
在Oracle數(shù)據(jù)庫字典中,許多視圖都有三個(gè)不同的實(shí)例,它們的前綴分別為"USER_"、"ALL_“及"DBA_”。"USER_"為前綴的數(shù)據(jù)庫字典視圖通常記錄執(zhí)行查詢的帳戶所擁有的對(duì)象的信息,"ALL_"為前綴的數(shù)據(jù)庫字典視圖通常記錄包括執(zhí)行查詢的帳戶所擁有的對(duì)象的信息及授權(quán)至PUBLIC的帳戶用戶所擁有的對(duì)象的信息,"DBA_"為前綴的數(shù)據(jù)庫字典視圖則包含所有數(shù)據(jù)庫對(duì)象的信息,而不管其所有者。其他的字典視圖中主要的是V視圖,之所以這樣叫是因?yàn)樗麄兌际且訴視圖,之所以這樣叫是因?yàn)樗麄兌际且訴視圖,之所以這樣叫是因為他們都是以V或GV開頭的。V開頭的。V開頭的。V視圖是基于X虛擬視圖的。V虛擬視圖的。V虛擬視圖的。V視圖是SYS用戶所擁有的,在缺省狀況下,只有SYS用戶和擁有DBA系統(tǒng)權(quán)限的用戶可以看到所有的視圖,沒有DBA權(quán)限的用戶可以看到USER_和ALL_視圖,但不能看到DBA_視圖。與DBA_,ALL,和USER_視圖中面向數(shù)據(jù)庫信息相反,這些視圖可視的給出了面向?qū)嵗男畔ⅰ?br />
在Oracle的絕大多數(shù)數(shù)據(jù)字典視圖中都有象DBA_TABLES,ALL_TABLES和USER_TABLES這樣的視圖家族。Oracle中有超過100個(gè)視圖家族,下表列出了最重要和最常用的視圖家族,需要注重的是每個(gè)視圖家族都有一個(gè)DBA_,一個(gè)ALL_一個(gè)USER_視圖。
在Oracle中還有一些不常用的數(shù)據(jù)字典表,但這些表不是真正的字典家族,他們都是一些重要的單一的視圖。這些視圖見下表:
總結(jié)
以上是生活随笔為你收集整理的Oralce数据库之存储过程、存储函数、触发器和数据字典的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql安装注意问题
- 下一篇: linux cmake编译源码,linu