1.1. 训练描述

使用游标,打印emp中20号部门的所有员工的信息

操作步骤答案

declare

cursor c_emp  is select * from emp where deptno=10;

v_row emp%rowtype;

begin

open c_emp;

loop

fetch c_emp into v_row;

exit when c_emp%notfound;

dbms_output.put_line(v_row.empno||':'||v_row.ename);

end loop;

close c_emp;

end;

1.2. 训练描述

弹出框中输入一个年龄数据,如果数值大于150,抛自定义的异常,显示一句话“此人年纪太大”

操作步骤答案

declare

v_age number:=&nums;

v_exception exception;  --自定义异常 v_exception

begin

if v_age>150 then

--抛异常

raise v_exception;

end if;

exception

when v_exception then

dbms_output.put_line('此人年纪太大');

end;

 

1.3. 训练描述

创建一个带out参数的存储过程 ,计算指定员工的年薪,并且用7788号员工测试

操作步骤

  1. 创建存储过程pro_yearsal
  2. 使用存储过程。

操作步骤答案

  1. 创建存储过程pro_yearsal

create or replace procedure pro_emp_sal(v_no  number,v_year_sal out number)

is

begin

select  sal*12+ nvl(comm,0) into v_year_sal from emp where empno=v_no;

end;

  1. 使用存储过程。

declare

v_sal number(8,2);

begin

pro_emp_sal(7369,v_sal);

dbms_output.put_line(v_sal);

end;

简述一下表空间、用户、表之间的关系?

一个表空间相当于mysql的一个数据库的概念,oracle是分配表空间,而mysql是新建数据库,表的数据,是由用户放入某一个表空间的某个表里,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。

由于 oracle 的数据库不是普通的概念,oracle 是由用户和表空间对数据进行管理和存放的。但是表不是由表空间去查询的,而是由用户去查的。因为不同用户可以在同一个表空间建立同一个名字的表,而是通过不同的用户来进行区分。

一个oracle数据库系统可以创建多个数据库,每个数据库称为实例,在实例里可以分配多个表空间,每个表空间里可以创建多个数据表,而每个表空间里的表数据都存储在一个数据文件里,要查询表空间里的表数据就需要在本实例下给表空间指定个用户,由用户来访问表空间里的表。

4. 视图

4.1. 简述什么是视图

  视图是一个虚拟的表,不存放数据,数据来源是原始的表

视图可以使复杂sql查询简单化,每一个视图包装了一条条复杂的SQL语句

4.2. 创建视图

create view 视图名称 as select 语句

例如:create view view_emp20 as select empno,ename,job,mgr,hiredate from emp where deptno=20;

4.3. 使用视图

select * from 视图名

不可以修改视图里的表数据,因为它不是个真实的实体表,如果改了数据会乱数据,导致不一致,我们创建视图时指定为指读视图

create view view_emp20 as select empno,ename,job,mgr,hiredate from emp where deptno=20 with read only;

5. 序列

5.1. 简述什么序列

在许多的数据表之中都存在一种称为自动增长列的操作,但是在Oracle之中,没有这种自动增长列,是需要用户手工的控制,这样做主要是为了开发方便,序列是oracle数据库提供的用于实现id自增长功能。

5.2. 创建一个序列

语法:

CREATE SEQUENCE sequence

[INCREMENT BY n]   --每次增长n

[START WITH n]     --初始值,从n开始

例如:create sequence person_sqc;

序列创建完成后,它的自动增长需要用户手动触发

nextval:取得序列的下一个内容

currval:取得序列的当前值

5.3.序列的使用

Insert into person  values(person_sqc.nextval,  “zhangsan”,1.null,”修正”)

6. 索引

6.1. 简述索引

索引是用于加速数据存取的数据对象,索引可以看做一本书的目录,通过目录可以很快的找到需要的内容。数据库里的索引就是为了提升查询速度(数据量大的情况下)。

6.2.创建单行索引

create index 索引名称 on 表名(列)

6.3. 创建复杂索引

create index 索引名称 on 表名(列,列)

6.4. 索引的测试

在员工表中插入500万的数据,

declare

begin

for i in 1..5000000 loop

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (emp_seq.nextval, emp_seq.currval, 'CLERK', 7902, sysdate,

dbms_random.value(800,3000) , null, 10);

end loop;

commit;

end;

查询工资等于1500的所有员工信息

没有索引的情况下我们查询:

select * from emp where sal=1500;

在查询条件工资字段建立索引

create index emp_sal_index on emp(sal);

在有索引的情况下进行查询:

Select * from emp where sal = 1500;

oracle上课 学习2 oracle 游标 存储过程 有用的更多相关文章

  1. Oracle上课学习笔记<1>

    简单的select查询语句 1.select查询语句基本语法 使用两个关键字: select 指定要查询的字段和内容 from 从哪张表中查询 语法:select 字段名 from 表名; 三种不同的 ...

  2. oracle 10g 学习之函数和存储过程(12)

    一.函数 1. 函数的 helloworld: 返回一个 "helloworld--!" 的字符串 create or replace function helloworld re ...

  3. oracle入门学习之oracle数据库结构

    1. oracle数据库结构 1.1 Oracle可以看做是一个大的数据库???,里面可以创建很多实例; 一个实例对应多个表空间.多个用户; 一个用户只能有一个表空间; 一个表空间可以有多个用户; 一 ...

  4. oracle 10g 学习之oracle管理(3)

    怎样将预先写好的sql脚本执行? select * from employees;→107条记录 利用 Oracle 企业管理器连接数据库服务器 点击打开以下界面: 此时已经连接成功了 用 Oracl ...

  5. oracle 数据库学习3 --oracle 数据库中常使用的函数

    1.字符函数: ASCII(X) -->返回X字符的ASCII码 concat(x,y)-->将y连接到X上输出 select concat(first_name,last_name) f ...

  6. Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器

    ---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...

  7. Oracle学习(十二):存储过程/存储函数

    1.知识点 --第一个存储过程 /* 打印Hello World create [or replace] PROCEDURE 过程名(參数列表) AS PLSQL子程序体: 调用存储过程: 1. ex ...

  8. Oracle的学习一:安装与卸载、sql *plus常用命令、Oracle用户管理

    1.为什么学习oracle? 性能优越: 小型数据库 中型数据库 大型数据库 acess.foxbase mysql.sql server.informix sybase.oracle.db2 复杂量 ...

  9. Mybatis下配置调用Oracle自定义函数返回的游标结果集

    在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...

随机推荐

  1. python cookbook 迭代器与生成器

    代理迭代 a = [1, 2, 3] for i in iter(a): print(i) for i in a.__iter__(): print(i) 这里的两个方法是一样的,调用iter()其实 ...

  2. [MEF] 学习之一 入门级的简单Demo

    MEF 的精髓在于插件式开发,方便扩展. 我学东西,习惯性的先搞的最简单的Demo出来,看看有没有好玩的东东,然后继续深入.这个博文,不谈大道理,看demo说事儿. 至于概念,请google ,大把大 ...

  3. 大话设计模式--建造者模式 Builder -- C++实现实例

    1. 建造者模式,将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示. 用户只需要指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了. 关键类Directo ...

  4. Java Applet:练习TextField类和TextArea类的文本事件

    出自: Java语言与面向程序程序设计(第二版) 第七章第五节P223 1. [代码]java代码 /** *这个程序主要来练习文本事件,当在文本框(TextField)中输入文字时,会在文本域(Te ...

  5. 关于MFC的DLL调用方法问题

    参考资料: 一.dll导出方式: MFC的DLL函数导出方法有两种:一种是通过模块定义文件DEF文件:另一种是在导出函数前加_declspec(dllexport). 1.def文件方法: 只需要在E ...

  6. Android: 一个两点触控的案例

    下面是一个两点触控的案例代码: package com.zzj; import android.app.Activity; import android.os.Bundle; import andro ...

  7. Failed to install xxxx.apk on device 'emulator-5554!

    异常信息:[HelloAndroid] Performing com.example.helloandroid.HelloAndroid activity launch[HelloAndroid] U ...

  8. mongodb与mysql的命令对比

    mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(col ...

  9. bzoj3224Treap

    Splay版本的会补... 在学了2个小时Splay之后深感Treap的优越 特地又花了20分钟打了个Treap 至于这些平衡树的优缺点 可以用平衡方式来直观的感受到 现在平衡树们面对着这样的一个问题 ...

  10. bzoj 3924 幻想乡战略游戏 —— 动态点分治

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3924 参考了博客:https://blog.csdn.net/qq_34564984/art ...