视图:相当于一个窗口,从这个窗口可以看到最美的风景。视图是用户看到的数据,不是真正存在于数据库表中的数据,这些数据来源于表,是经过数据抽取、转换变成的。
创建一个视图
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中执行,而过程不能。
我们可以讲比较复杂的查询写成函数,然后到存储过程中调用这些函数。