ITPub博客

首页 > 数据库 > Oracle > 数据库中的重要对象

数据库中的重要对象

原创 Oracle 作者:773281375 时间:2014-03-07 12:41:53 0 删除 编辑
对象时性质相同的数据元素的集合,如超市里的商品一般由食品、家用电器、家具等对象组成

一、表
1、表示用来存储数据的最基本单位
2、表的创建sql语句
-- Create table
create table DEPT
(
  deptno NUMBER(2) not null,
  dname  VARCHAR2(14),
  loc    VARCHAR2(13)
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints 
alter table DEPT
  add constraint PK_DEPT primary key (DEPTNO)
  using index 
  tablespace USERS   --该DEPT表存储在USERS表空间中
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

二、视图
1、视图是用户看到的数据,不是真正存在于数据库表中的数据,这些数据来源于表,是经过数据抽取、转化变成的
2、查看用户下有多少个视图
select * from user_views;
3、创建求平均工资的视图
create view avgsal as
select d.dname as "部门",
       round(avg(e.sal), 2) as "平均工资",
       count(*) as "员工人数"
  from emp e, dept d
 where e.deptno = d.deptno
 group by d.dname;

注:create view为创建视图关键字,后跟视图名称,as为“当做”意思,后面跟SQL查询语句,即avgsal视图由其下面的查询SQL语句组成
4、视图的查询
select * from avgsal;

三、序列
1、利用它可以生产唯一的整数,一个序列的值是由Oracle数据库的特殊程序自动生成的,序列可以定义自动递增或递减。
2、序列创建
create table book(
       bookID number(12) constraint pk_book primary key,
       bookName varchar2(32) not null,
       price number(5,2),
       printTime date);
       
create sequence bookID   --创建序列
       Start with 1
       Increment by 1
       Maxvalue 99999999
       nocache
       nocycle;
3、插入数据
insert into book(bookid,bookname) 
       values(bookid.nextval,'三毛流浪记');
4、通过虚表查看bookid序列的当前值和下一个值
当前值:select bookid.currval from dual;
下一个值:select bookid.nextval from dual;

四、函数
1、函数分为两种,一种是Oracle数据库自身的函数,另一种是用户自己写的函数
2、创建一个通过员工的ID号获取其薪水的函数
create or replace function get_empsal(emp_no 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:该函数定义一个返回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相对应

3、通过函数获取员工薪水
select get_empsal(7566) from dual;

五、存储过程
1、存储过程是一组为了完成特定功能而建立的SQL语句集,经编译后存储在数据库中,用户通过制定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
2、创建一个根据员工号删除员工信息的存储过程
create or replace procedure Delempno(empid in number) as
begin
  delete from emp where emp.empno=empid;
  commit;
end Delempno;
注:
create or replace procedure:创建存储过程的关键字,如果存在同名的存储过程,则会替换这个存储过程;
                                           Delempno是存储过程的名称
empid in number:为存储过程的传入参数,该参数为number类型
③begin...end...:这是存储过程开始和结束的关键字,在begin...end之间为存储过程的具体SQL语句
3、存储过程的执行
在命令窗口中输入:excute Delempno(7566);

六、索引
1、索引时对数据库表中一列或多列的值进行排序的一种结构,相当于一本书的目录,可以加快查找内容的作用;索引可以加快数据库的查询速度。
2、索引创建:根据表test_index的id字段建立名为id_test_index的索引
create index id_test_index on test_index(id);

七、同义词
1、同义词是现有对象的一个别名,分为私有同义词和公共同义词
2、确认用户是否有创建同义词的权限及权限的授予
①查询是否有权限
select * from session_privs s where s.privilege like '%SYNONYM%'; 
②权限授予
grant create any synonym to scott;
grant create public synonym to scott;
③创建和删除一个表的同义词
create synonym sg for salgrade;
drop synonym sg;

八、Oracle数据库中函数和存储过程有何区别
①函数必须有返回值,而过程没有返回值
②函数可以单独执行,而过程必须通过execute执行
③函数可以嵌入SQL中执行,而过程不能
其实我们可以将比较复杂的查询写成函数,然后到存储过程中调用这些函数

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29489498/viewspace-1102974/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-02-17

  • 博文量
    26
  • 访问量
    185899