1. 程式人生 > >oracle索引、視圖、存儲過程、觸發器、oracle數據類型

oracle索引、視圖、存儲過程、觸發器、oracle數據類型

real 輸出數據 image gin demo 同名 全表掃描 cas 業務規則

1、索引:索引是幫助用戶在表中快速地找到記錄的數據庫結構。

a) 自動創建索引:當你為一張表定義主關鍵或唯一性約束條件時一個惟一的索引就已經被創建了。

b) 手動創建索引: 用戶可以自己創建索引。

創建索引:create index 索引名 on 表名 (列名1,列名2);

例如:技術分享圖片

何時用到索引:表很大,並且在where中經常用到,該列的值取值範圍很大時;

不需要索引:表很小時 用不到索引,並且經常更新時;

單一索引與復合索引:

------------單一索引:create index 索引名 on 表名 (列名);

------------復合索引:creat index 索引名 on 表名(列名1,列名2);例如:Create Index i_deptno_job on emp(deptno,job); ------------在emp表的deptno、job列建立索引。

 select * from emp where deptno=66 and job=‘sals‘ ->走索引。

select * from emp where deptno=66 -------------走索引。

select * from emp where job=‘sals‘ ---------------進行全表掃描、不走索引。

如果在where 子句中有OR 操作符單獨引用Job 列(索引列的後面 列) 則將不會走索引,將會進行全表掃描。

2、視圖:視圖是由一個或若幹個基表產生的數據的集合,它不占用存儲空間。

----------------------視圖中並沒有存放數據,而僅僅是一條

SELECT語句。

創建視圖:create or replace view 視圖名 as select * from 表名 where 條件;

例如:技術分享圖片

查看視圖:select* from 視圖名;

例如:技術分享圖片

--------------------刪除視圖: Drop view abc;

3、存儲過程:

過程procedure 也叫存儲過程,是由SQL語句和PL/SQL語句組合在一起為執行某一個任務的一個可執行單位。我們在使用時可以調用,過程沒有返回值。

(1)無參:

create or replace procedure 過程名 as

聲明語段;

begin

執行語句段;

exception

異常處理語句段;

end;

(2)帶參數過程的創建

①參數類型

在PL/SQL過程中,可以有3中類型的參數。

in 參數:讀入參數,主程序向過程傳遞參數值。

Out 參數:讀出參數,過程向主程序傳遞參數值。

in out參數:雙向參數,過程與主程序雙向交流數

帶參創建:

create or replace procedure 過程名(

參數1[in|out|in out]數據類型

[,參數2[in|out|in out] 數據類型]

……

[,參數n[in|out|in out] 數據類型]

)

(is|as)

聲明語句段;

Begin

執行語句段;

Exception

異常處理語句段;

End;

舉例:

create or replace procedure runbyparmeters_1 (
isal in emp.sal%type,sjob in varchar)
as icount number;
begin
select count(*) into icount from emp where sal>isal and job=sjob;
DBMS_OUTPUT.PUT_LINE(‘符合條件的記錄有 ‘|| icount || ‘條‘);
exception
when too_many_rows then
DBMS_OUTPUT.PUT_LINE(‘返回值多於1行‘);
when others then
DBMS_OUTPUT.PUT_LINE(‘在RUNBYPARMETERS過程中出錯!‘);
end;

在可視化工具裏面的 procedure文件夾可以查看過程有沒有建立成功;沒成功會有一個差號

然後在plsql中傳參:

PLSQL中執行

declare

realsal emp.sal%type;

realjob varchar(40);

begin

realsal:=1100;

realjob:=‘CLERK‘;

runbyparmeters_1(realsal,realjob);

-- runbyparmeters_1(sjob=>realjob,isal=>realsal);

END;

4、觸發器:

觸發器是一種特殊類型的存儲過程,由一些SQL語句組成,主要用於執行強制性的業務規則或要求,但不返回結果。

觸發事件或語句:引起觸發器被激發的SQL語句,是對指定表執行的INSERT、UPDATE或DELETE語句

觸發器限制:一個布爾表達式,當觸發器激發時該條件必須為TRUE。觸發器的限制是用WHEN子句來指定

--創建觸發器

create or replace trigger tri_test

before--觸發之前

update or delete--更新或刪除

on emp

for each row--對行進行操作

begin

dbms_output.put_line(:old.sal);--old表示數據庫舊值

insert into demo(id) values (:new.sal);--new新值

end;

update emp set sal=888 where empno=7788;

commit;

先執行創建觸發器代碼後,再執行最後的更新語句。當更新emp表後將會輸出數據庫中本來存放的值,並且觸發添加語句在demo表中插入一條語句。

例如:

create or replace trigger tri_test

before

update or delete or insert

on emp

for each row

begin

case

when updating then

raise_application_error(-20000,‘今天不能修改‘);

when inserting then

raise_application_error(-20001,‘今天不能插入‘);

when deleting then

raise_application_error(-20000,‘今天不能刪除‘);

end case;

end;

修改時觸發觸發器

update emp set sal=777 where empno=7788;

insert into emp (empno) values (123);

commit;

如圖:

技術分享圖片

5、數據類型

技術分享圖片

--創建表

create table userinfo

(

id number(6,0),

usernam varchar2(20),

userpwd varchar2(20),

email varchar2(30),

regdate date

);

刪除表

--刪除表的結構

drop table table_name;

添加字段

alter table table_name add column_name datatype;

table_name是表名稱, column_name是列名稱, datatype是數據類型

4.修改表字段名稱和表名

--給字段改名

alter table table_name rename column column_name To new_column_name;

--修改表的名字

rename table_name to new_table_name;


5.刪除字段

alter table table_name drop column column_name;

6.更改字段長度,類型

eg:修改remarks字段修改字段的長度

alter table userinfo modify remarks varchar2(150);

eg:修改字段類型

a.如果表中沒有數據

alter table 表名 modify(字段名1 類型,字段名2 類型,字段名3 類型.....)

b.如果表中有數據(分為四步)

--修改原字段名

ALTER TABLE 表名 RENAME COLUMN 字段名A TO 字段名B;

--添加一個和原字段同名的字段"字段名A",添加的字段

ALTER TABLE 表名 ADD 字段名 目標類型;

--將"字段名B"的數據更新到新建字段"字段名A"中

UPDATE 表名 SET 字段名A = TIRM(字段名B);

--更新完成後,刪除原備份字段"字段名B"

ALTER TABLE 表名 DROP COLUMN 字段名B

oracle索引、視圖、存儲過程、觸發器、oracle數據類型