• 初识数据库(其他数据库对象)


    视图 : 虚表

      --语法结构 :  create view 视图名 as 子查询

      --创建emp表的视图

        create view empname

        as

        select ename from emp

      --对视图进行操作需要赋予权限,要使用管理员用户操作

      --赋予权限,为scott用户解锁创建视图权限

        grant create view to scott

        select * from empname

      --创建一个视图,emp表中20部门的信息

        create view emp10

        as

        select * from emp where deptno = 10

        select * from emp10

        select * from emp10t

      --视图与表的区别

        --1、创建一个视图,视图修改,源表修改 ;源表修改,视图也修改 

        --2、创建的表是独立的,表修改,源表不修改;源表修改,表不修改

          create table emp10t

          as

          select * from emp where deptno = 10

          update emp set deptno = 10 where empno = 9527

          update emp10 set ename = 'heihei' where empno = 9527

          select * from emp10

      --覆盖

        create or replace view emp10

        as

        select ename from emp where deptno=10

      --字段别名

        create or replace view emp10

        as

        select sal*12 annsal from emp where deptno=10

        select * from emp10

      --不允许违反条件

        create or replace view emp10

        as

        select * from emp where deptno=10

        with check option

        update emp10 set deptno =20 --with check option where 子句违反

        where empno=9527

      --只读

        create or replace view emp10

        as

        select * from emp where deptno=10

        with read only

        select * FROM EMP10

    多表关联视图

      create or replace view stu10

        as

        select s.scode,s.sname,c.cno,c.cname,t.tno,t.name1,t.name2

        from student s

        inner join calss c

        on(s.cno=c.cno)

        inner join test t

        on(c.tno=t.tno)

      --学生表、班级表、课程表关联

        create or replace view emp20

        as

       select s.scode,s.sname,s.sbirthday,s.ssex,c.cno,c.cname,t.tno,t.name1,t.name2 from student s inner join calss c

        on(s.cno = c.cno) inner join test t

        on(c.tno = t.tno)

      --删除视图

      --drop view 视图名

        drop view stu10

    序列:一组有顺序的数列

      --表 有主键 利用序列生成有顺序的不重复的主键进行插入  5.6.7....

      --生成一个序列,要求从1001开始,每次增加1,没有最大值,不循环

      --每次缓存10个序列值

        create sequence seq_student

      --序列的起始数

        start with 1001

      --设置每次增加1

        increment by 1

      --没有最大值 

        nomaxvalue

      --没有最小值

        nominvalue

      --不循环

        nocycle

      --缓存10个

        cache 10

      --通过两个方法来使用

        --1、nextval  :下一个值   

        select seq_student.nextval

        from dual

      --2、currval :当前值

        select seq_student.currval

        from dual

      --序列在什么地方用 ?

      --向表中插入数据

        insert into student values (seq_student.nextval,'feier',sysdate,168,'女',2)

        select * from student

      --序列的应用范围 :

        --表、视图、insert values( ) 、update set

    索引

        select * from emp

      --给学生表中的名字添加索引 :

        create index ind_student_sname on student(sname)

      --索引的优点:

        --提高执行查询的速度  -> 先排序,后折半查找

        --索引的缺点:数据量小的时候,应用索引会降低查询速度

    过程:存储过程

        --建立和管理过程 : 语法结构 procedure:过程关键字

        --create or replace procedure 过程名(参数1,参数2|null) is|as  声明部分:变量名字 变量类型 ;begin sql语句部分; 输出部分 ;end ;

      --创建输出系统时间过程

        --不需要传入任何参数的过程 - 无参数过程

        create or replace procedure print_sysdate is var_date date;

        begin

        select sysdate into var_date from dual;

        dbms_output.put_line(to_char(var_date,'yyyy-mm-dd'));

        end print_sysdate;

      --在命令窗口中

        SQL> set serveroutput on;     --设置输出功能开启

        SQL> execute print_sysdate;   --执行过程

        2016-03-25

      PL/SQL 过程成功完成

      SQL> exec print_sysdate;    --执行单词简写

        2016-03-25

      PL/SQL 过程成功完成

      SQL> call print_sysdate;

        call print_sysdate

      ORA-06576: 不是有效的函数或过程名

      --call :是放到缓存中执行,用于JDBC调用过程

        --用于java程序中,虚拟机调用过程的关键字

      --有参数过程

        --调用过程的时候需要传入参数

        --根据员工的员工编号查询员工名字

        create or replace procedure print_ename(v_empno number) is v_ename emp.ename%type;

        begin

        select ename into v_ename from emp where empno = v_empno;

        dbms_output.put_line(v_ename);

        end;

    过程与表与视图

      --输出参数 --按位置传递参数

        create or replace procedure print_ename(v_empno in number,v_ename out varchar) is

        begin

        select ename into v_ename from emp where empno = v_empno;

        dbms_output.put_line(v_ename);

        end;

      SQL> variable v_name varchar2(20); --创建临时变量 命名为v_name

      SQL> exec print_ename(9527,:v_name); --在输出参数前加上 : 冒号

        HUAAN

      PL/SQL 过程成功完成

      v_name

      ---------

      HUAAN

      --输入输出参数

        create or replace procedure get_job(var_param in out varchar) is

        begin

        select job into var_param from emp where ename = var_param;

        dbms_output.put_line(var_param);

        end;

      SQL> var v_var varchar2(20);

      SQL> exec :v_var := 'SCOTT';

      PL/SQL 过程成功完成

      v_var

      ---------

      SCOTT

      SQL> exec get_job(:v_var);

      ANALYST

      PL/SQL 过程成功完成

      v_var

      ---------

      ANALYST

      --按名称传递参数

        create or replace procedure get_sal(v_empno number,v_ename varchar2,v_sal out number) is

        begin

        select sal into v_sal from emp where empno = v_empno and ename = v_ename;

        dbms_output.put_line(v_sal);

        end;

      SQL> var v_sal number;

      SQL> exec get_sal(v_ename=>'SCOTT',v_empno=>'7788',v_sal=>:v_sal);

      3000

      PL/SQL 过程成功完成

      v_sal

      ---------

      3000

      --混合传递

      SQL> exec get_sal(7788,v_ename=>'SCOTT',v_sal=>:v_sal);

      3000

      PL/SQL 过程成功完成

      v_sal

      ---------

      3000

      --混合传递注意的地方:

      --1、必须先按位置传递,再按名称传递,如果先按名称传递,则其后不能再继续按位置传递

      SQL> exec get_sal(7788,v_ename=>'SCOTT',:v_sal);

      begin get_sal(7788,v_ename=>'SCOTT',:v_sal); end;

      ORA-06550: 第 1 行, 第 37 列:

      PLS-00312: 一个定位相关参数没有说明其相关性

      ORA-06550: 第 1 行, 第 7 列:

      PL/SQL: Statement ignored

      --drop procedure 过程名

        drop procedure get_sal

      purge recyclebin;清空回收站

  • 相关阅读:
    20165331 第五周学习总结
    第二次测试补做
    20165331 《Java程序设计》第四周学习总结
    2018-2019-1 20165237 《信息安全系统设计基础》第二周学习总结
    2018-2019-1 20165237 《信息安全系统设计基础》第一周学习总结
    20165237 2017-2018-2《Java程序设计》课程总结
    2017-2018-2 20165237 实验五《网络编程与安全》实验报告
    2017-2018-2 20165237 实验四《Android开发基础》实验报告
    20165237 2017-2018-2 《Java程序设计》第十周考试补做及编程题
    2017-2018-2 20165237 实验三《 敏捷开发与XP实践》实验报告
  • 原文地址:https://www.cnblogs.com/coffeerun/p/5806101.html
Copyright © 2020-2023  润新知