• 6.4、视图、序列、同义词--Oracle模式对象


    视图view

    是一个虚拟表,不存储数据值。

    Create or replace view 病人基本信息
    as
    select 病人id,住院号,姓名,性别,年龄 from 病人信息表;

    在创建视图时,只是将视图的定义存入到数据库字典中,并没有执行select查询,只有当用户对视图查询时,系统才按照视图的定义从基本表中获取数据。

    视图上可进行insert、update和delete操作。
    一个视图中,可以同时包含可更新的字段不可更新的字段
    例如:

    Create or replace view 病人基本信息(病人id,住院号,姓名,性别,病人年龄)
    as
    select 病人id,住院号,姓名,性别,年龄+1 from 病人信息表;

    年龄字段是,由源表字段“年龄”+1计算出来的,所以病人年龄字段不能更新,其他字段可以更新。
    可以通过数据字典USER_UPDATABLE_COLUMNS视图,来查询哪些字段可以更新,哪些不能更新。


    WITH CHECK OPTION选项

    Create or replace view stu_age_view(学生编号,学生姓名,学生年龄)
    as
    select sid,sname,sage
    from student
    where name='小白';

    --此时这个视图是可以insert插入数据的,如下操作:

    Insert into stu_age_view(学生编号,学生姓名,学生年龄)
    Values(3,'小红',20);

    --查询表student结果如下:
    Select* from student;
    SID SNAME SSEX SAGE SCLASS
    ---- ------- ------ ------ ------
    1     小白      男      22      1
    2     小明      男      21      1
    3     小红               20

    在更新视图时,违反了【Where name='小白'】限制条件,往表中插入了数据。
    可以通过在创建表的时候使用WITH CHECK OPTION选项,有了该子句,再插入类似记录时,Oracle会提示报错ora-01402:视图 WITH CHECK OPTION子句违规。

    删除视图:
    Drop view stu_age_view;

    序列sequence:
    用于产生一系列唯一数字的数据库对象。不占用实际存储空间,只是在字典中保存定义
    使用序列可以实现自动产生主键值。

    要有创建序列的权限 create sequence 或 create any sequence

    创建序列的语法:
    CREATE SEQUENCE sequence_name --创建序列名称
    [INCREMENT BY increment--递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1
    [START WITH start--起始值,递增默认是minvalue 递减是maxvalue
    [MAXVALUE n | NOMAXVALUE] --最大值
    [MINVALUE n | NOMINVALUE] --最小值
    [CACHE n | NOCACHE]--预分配,并存入到内存
    [CYCLE | NOCYCLE]; --循环/不循环

    两个伪列:
    NEXTVAL --返回序列生成的下一个值
    CURRVAL --返回序列的当前值
    NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效

    修改序列:
    Alter sequence stu_seq increment by 2;
    对序列修改后,缓存中保存的序列值将全部丢失。

    删除序列:
    Drop sequence stu_seq;

    同义词synonym:
    是表、索引、视图等模式对象的一个别名。不占用任何实际的存储空间。
    分两类:公共同义词、私有同义词

    创建同义词:
    Create [public] SYNONYM synonym_name for schema_object;

    删除同义词:
    Drop public sysnonym pub_sysnonym_name;

    ----执行查找所有失效的同义词,生成删除脚本如下:

    select 'drop '|| decode(s.owner,'PUBLIC','public synonym ','synonym ' || s.owner || '.')
    || s.synonym_name
    || ';' as "Dropping invalid synonyms:"
    from dba_synonyms s
    where table_owner not in ('SYSTEM', 'SYS')
    and db_link is null
    and not exists
    (select null from dba_objects o
    where s.table_owner = o.owner
    and s.table_name = o.object_name);

    ----查询当前用户下,没有创建同义词的对象有哪些?

    Select *
    from dba_objects s
    where owner in ('ZLHIS') And object_type In('TABLE','PROCEDURE','FUNCTIONS')
    and Not exists
    (select null from dba_synonyms o
    Where o.table_owner = s.owner
    and o.table_name = s.object_name And o.db_link is null)

     

    生命不息,折腾不止;不计后果,不问前程!
  • 相关阅读:
    路径操作OS模块和Path类(全)一篇够用!
    数据可视化:绘图库-Matplotlib
    matplotlib中文显示的问题
    Microsoft Visual C++ 14.0 is required问题解决
    python习题——随机整数生成类
    python——时间模块
    怎么获取10个线程的结果再返回
    集群服务器定时任务,只运行一个定时器的设计
    分布式事务
    分布式数据库---分库分表
  • 原文地址:https://www.cnblogs.com/jionjionyou/p/5592567.html
Copyright © 2020-2023  润新知