oracle 學習(四)
檢視:相當於一個視窗,從這個視窗可以看到最美的風景。檢視是使用者看到的資料,不是真正存在於資料庫表中的資料,這些資料來源於表,是經過資料抽取、轉換變成的。
建立一個檢視
create view avgsal as select d.name as "部門",round(avg(sal),2) as "平均工資", count(*) as "員工人數" from emp e,dept d where e.deptno = d.deptno group by d.dname;
檢視檢視
select * from avgsal;
檢視使用者下面有多少檢視
select * from user_views;
create table book (bookID number(12) constraint pk_book primary key, bookName varchar(32) not null,price number (5,2) ,printTime date);
序列:是資料庫的物件之一,利用它可以生成唯一的整數。
建立一個序列是從1開始,然後下一個增加1,最大值為999999999999,數值不可迴圈使用。
create sequence bookID start with 1 Increment by 1 Maxvalue 999999999999 nocache nocycle;
insert into book (bookID,bookname) values(bookID.Nextval,'三毛流浪記');
序列的Nextval表示序列的下一個數值,Currval表示序列的當前數值。可以通過虛表dual檢視。
select bookID.Nextval from dual ;
select bookID.Currval from dual;
函式(一種為oracle自身的函式,另一種是使用者自己寫的函式)
create or replace function get_empsal (emp_no in number)
return number
is emp_sal number(7,2);
begin
select sal into emp_sal from emp where empno=emp_no;
return (emp_sal );
end;
create or replace function:這是建立或者已經存在的函式,函式名為get_empsal ,括號中的emp_no為輸入的員工號,輸入的型別是:number。
return number :該函式定義返回一個數值型別的值。
is emp_sal number(7,2)定義引數emp_sal 該引數型別為number(7,2)
Begin為函式的程式段開始
select ...return ... 這是函式的程式段,select sal 把emp表的sal薪水查詢出來,把查詢出來的sal賦予emp_sal引數,輸入的引數與emp表的員工號相等,則返回該員工的薪水。
END,結束函式的SQL程式段。與上面的Begin對應。
呼叫函式
select get_empsal(7566) from dual;
儲存過程
是一組為了完成特定功能而建立的SQL語句集,經編譯後儲存在資料庫中。使用者通過制定儲存過程的名字,並給出引數來執行它。
create or replace procedure DelEmpno (empid in number) is
begin
delete from emp where emp.empno=empid;
commit;
end DelEmpno;
create or replace procedure:是建立儲存過程的關鍵字,如果存在同名的儲存過程,則會替換這個儲存過程,DelEmpno為這個儲存過程的名字;
empid in number :empid 為DelEmpno儲存過程的引數,該引數的資料型別為數值。
begin...end...這是儲存過程開始和結束關鍵字,在begin...end 之間為儲存過程的具體SQL語句。
執行 儲存過程
execute DelEmpno(7566);
execute 是執行儲存過程的關鍵字。
索引,是對資料庫表中的一列或多列的值進行排序的結構,相當於一本書的目錄,有可以加快資料庫的查詢速度。
建表:create table test_index(id number ,name varchar2(200));
建索引:create index id_test_index on test_index(id);
同義詞:是現有物件的一個別名。分為私有同義詞和公共同義詞。如一個表名過長或者訪問其他使用者的表資料需要加上使用者名稱作為字首,可以用別名來解決。
create synonym sg for salgrade;
給salgrade建立一個別名 sg。
create public synonym emp for scott.emp;//建立公共同義詞。
oracle 資料庫中函式和儲存過程的區別?
1、函式必須有返回值,而過程沒有返回值。
2、函式可以單獨執行,而過程必須通過execute執行。
3、函式可以嵌入sql中執行,而過程不能。
我們可以講比較複雜的查詢寫成函式,然後到儲存過程中呼叫這些函式。