oracle学习 视图,数据字典



-- 一,oracle语句的分类: 4类:
DML -- data manage language     -- insert  delete update select    
DDL -- data define language      -- create user/table/constraint....  alter user/table/contraint.....
DCL -- data control language     -- grant revoke
TCL -- transaction control language 事务控制语句    -- commit rollback      提交   回滚
       
-- 二,事务 ---多条DML语句构成的执行单元,它们可以整体提交(执行成功)或者回滚(撤销执行)
--DDL DCL TCL与事务无关,执行即成立。

--自动提交事务 --- 每条DML语句作为一个独立的事务,单独执行,单独提交。(jdbc默认)

Oracle事务分析:
--从上一个事务结束后的第一条DML起始

--事务的结束分4种情况:
--1,遇到commit,提交     --rollback,回滚
--2, 不正常关闭sqlplus ,单击关闭按钮 ,则回滚
--3,正常关闭sqlplus -- exit,quit,提交
--4,遇到了 DDL,DCL语句


一,视图
1,概念:--- 虚拟表,只有表的结构,没有数据,本质就是对一条sql语句的封装,对视图的查询,就是执行那条sql语句。

2,创建格式:
create view 视图名称 as  select 语句;

--例:创建视图,查询工资高于2000 的所有员工
create  or replace view view1 as  select * from emp where sal>2000;

3,使用视图,当成一张表来用。
SQL> select * from view1;
本质就是执行了:select * from emp where sal>2000;
视图中没有数据,不存在与表的同步问题,尽量不要在视图中进行insert update delete,因为数据不完整,因为本质的操作仍然是对emp的操作。

4,修改视图:-- 就是删除重建
-- 查看2000元以上的员工的empno ename sal
create or replace view view1 as select empno,ename,sal from emp where sal>2000;

5,查看当前用户的视图:
SQL> select * from user_views;

6,删除视图
SQL> drop view view1;

7,视图的作用:
1)复杂sql语句的简化
例:查看每个部门的最高工资的员工信息
create or replace view view_maxsal as select * from emp where (deptno,sal) in (select deptno,max(sal) from emp group by deptno);

SQL> select * from view_maxsal;
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
 7902 FORD       ANALYST    7566 1981-12-3     3000.00               20
 7839 KING       PRESIDENT       1981-11-17    5000.00               10
 
SQL> select * from view_maxsal where job='MANAGER';
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
 


四,数据字典
-- 查询对象信息:
1,总表
select * from dictionary order by table_name;

2,select * from tab; --显示表与视图
--数据字典
select * from all_tables;-- 用户具备查看权限的表
select * from user_tables; -- 用户所拥有的表

3,select * from user_users;
select * from all_users;
select * from user_views;
select * from user_constraints;
select * from user_sequences;
select * from user_indexes;
select * from user_ind_columns;
select * from user_indexes a inner join user_ind_columns b on a.INDEX_NAME=b.INDEX_NAME;

6,查看当前用户的存储过程
select * from user_procedures;


七,自定义函数
1,函数有返回值;  存储没有返回值,但是有输出参数
 
2,格式
--声明格式
create or replace function 函数名(形参 类型,.....) return 返回值类型 is
       --变量声明
begin
          -- 函数体
          return ....;
  end;


九,触发器   ORACLE中的 触发器
--一,为什么要使用触发器
--存储过程的一种,是自动执行的存储过程,所以叫触发
--什么时候触发,在insert  delete  update 前后自动触发执行。
--用途 :用于加强约束条件,约束的补充。

--二,建立触发器的语法
格式:
  create or replace trigger <触发器名>
  after/before    insert/update/delete on <表名>
  for each row
  when (条件) 
  begin

  exception

  end;

--例,
当表emp中加入员工的时候,如果这个员工的部门
在部门表中没有,则在部门表中dept插入该部门信息,
要求部门编号一定要大于77
create or replace trigger emptr
before insert on emp   --insert语句触发
for each row          --行级触发器
declare
  n_count number;
begin
  if :new.deptno > 77 then
    select count(*) into n_count
          from dept where deptno = :new.deptno;
     --如果不存在就在部门表中加入该部门
     if n_count = 0 then
           insert into dept values (:new.deptno,'人事','北京');
     end if;     
  end if;
end;

--触发语句
insert into emp(empno,ename,deptno) values(9004,'mike',50);--触发器后外键约束异常
insert into emp(empno,ename,deptno) values(3568,'tom222',88);-->70触发了触发器
select  * from emp;
select  * from dept;
commit;

-- 一,oracle语句的分类: 4类:
DML -- data manage language     -- insert  delete update select    
DDL -- data define language      -- create user/table/constraint....  alter user/table/contraint.....
DCL -- data control language     -- grant revoke
TCL -- transaction control language 事务控制语句    -- commit rollback      提交   回滚
       
-- 二,事务 ---多条DML语句构成的执行单元,它们可以整体提交(执行成功)或者回滚(撤销执行)
--DDL DCL TCL与事务无关,执行即成立。

--自动提交事务 --- 每条DML语句作为一个独立的事务,单独执行,单独提交。(jdbc默认)

Oracle事务分析:
--从上一个事务结束后的第一条DML起始

--事务的结束分4种情况:
--1,遇到commit,提交     --rollback,回滚
--2, 不正常关闭sqlplus ,单击关闭按钮 ,则回滚
--3,正常关闭sqlplus -- exit,quit,提交
--4,遇到了 DDL,DCL语句


一,视图
1,概念:--- 虚拟表,只有表的结构,没有数据,本质就是对一条sql语句的封装,对视图的查询,就是执行那条sql语句。

2,创建格式:
create view 视图名称 as  select 语句;

--例:创建视图,查询工资高于2000 的所有员工
create  or replace view view1 as  select * from emp where sal>2000;

3,使用视图,当成一张表来用。
SQL> select * from view1;
本质就是执行了:select * from emp where sal>2000;
视图中没有数据,不存在与表的同步问题,尽量不要在视图中进行insert update delete,因为数据不完整,因为本质的操作仍然是对emp的操作。

4,修改视图:-- 就是删除重建
-- 查看2000元以上的员工的empno ename sal
create or replace view view1 as select empno,ename,sal from emp where sal>2000;

5,查看当前用户的视图:
SQL> select * from user_views;

6,删除视图
SQL> drop view view1;

7,视图的作用:
1)复杂sql语句的简化
例:查看每个部门的最高工资的员工信息
create or replace view view_maxsal as select * from emp where (deptno,sal) in (select deptno,max(sal) from emp group by deptno);

SQL> select * from view_maxsal;
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
 7902 FORD       ANALYST    7566 1981-12-3     3000.00               20
 7839 KING       PRESIDENT       1981-11-17    5000.00               10
 
SQL> select * from view_maxsal where job='MANAGER';
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
 


四,数据字典
-- 查询对象信息:
1,总表
select * from dictionary order by table_name;

2,select * from tab; --显示表与视图
--数据字典
select * from all_tables;-- 用户具备查看权限的表
select * from user_tables; -- 用户所拥有的表

3,select * from user_users;
select * from all_users;
select * from user_views;
select * from user_constraints;
select * from user_sequences;
select * from user_indexes;
select * from user_ind_columns;
select * from user_indexes a inner join user_ind_columns b on a.INDEX_NAME=b.INDEX_NAME;

6,查看当前用户的存储过程
select * from user_procedures;


七,自定义函数
1,函数有返回值;  存储没有返回值,但是有输出参数
 
2,格式
--声明格式
create or replace function 函数名(形参 类型,.....) return 返回值类型 is
       --变量声明
begin
          -- 函数体
          return ....;
  end;


九,触发器   ORACLE中的 触发器
--一,为什么要使用触发器
--存储过程的一种,是自动执行的存储过程,所以叫触发
--什么时候触发,在insert  delete  update 前后自动触发执行。
--用途 :用于加强约束条件,约束的补充。

--二,建立触发器的语法
格式:
  create or replace trigger <触发器名>
  after/before    insert/update/delete on <表名>
  for each row
  when (条件) 
  begin

  exception

  end;

--例,
当表emp中加入员工的时候,如果这个员工的部门
在部门表中没有,则在部门表中dept插入该部门信息,
要求部门编号一定要大于77
create or replace trigger emptr
before insert on emp   --insert语句触发
for each row          --行级触发器
declare
  n_count number;
begin
  if :new.deptno > 77 then
    select count(*) into n_count
          from dept where deptno = :new.deptno;
     --如果不存在就在部门表中加入该部门
     if n_count = 0 then
           insert into dept values (:new.deptno,'人事','北京');
     end if;     
  end if;
end;

--触发语句
insert into emp(empno,ename,deptno) values(9004,'mike',50);--触发器后外键约束异常
insert into emp(empno,ename,deptno) values(3568,'tom222',88);-->70触发了触发器
select  * from emp;
select  * from dept;
commit;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值