IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【详细】Oracle中的视图、索引、PL/SQL语言、游标 -> 正文阅读

[大数据]【详细】Oracle中的视图、索引、PL/SQL语言、游标

加油,新时代打工人!

以下在学习Oracle数据的记录过程,以及遇到的问题。

  1. 【详细】 Oracle Database 19c 安装步骤
  2. Oracle基础入门语句
  3. 【详细】Oracle单行函数和多行函数

Oracle中的视图、索引、PL/SQL语言、游标

一、视图

oracle视图可以理解为数据库中一张虚拟的表,他是通过一张或者多张基表进行关联查询后组成一个虚拟的逻辑表。查询视图,本质上是对表进行关联查询。
视图的本身是不包含任何数据,只是一个查询结果,当基表的数据发生变化时,视图里面的数据也会跟着发生变化。我们经常在实际开发过程中遇到的视图可以大概分为三种:单表视图、多表关联视图、视图中含有子视图。

---视图
---视图的概念:视图就是提供一个查询的窗口,所有的数据来自于原表
---查询语句创建表
create table emp as select * from scott.emp; 
select * from scott.emp; 
---创建视图【必须有dba权限】
create view v_emp as  select ename,job,sal from emp;
--查询视图
select * from v_emp;

--修改视图【不推荐】
update v_emp set sal=1000 where ename='WARD';
commit;
--创建只读视图   
create view v_emp1 as  select ename,job,sal from emp with read only;
---视图的作用
---第一:视图可以屏蔽掉一些敏感字段,如工资。
---第二:保证总部和分部数据及时统一。【常用】

二、索引 [面试常问]

Oracle索引(index)最大的作用是用来优化数据库查询的效率,提升数据库的查询性能。就好比书的目录一样,可以通过目录来直接定位所需内容存在的页数,大大提高检索效率。
Oracle数据库中如果某列出现在查询的条件中,而该列的数据是无序的,查询时只能从第一行开始一行一行的匹配。创建索引就是对某些特定列中的数据进行排序或归类,生成独立的索引表。在某列上创建索引后,如果该列出现在查询条件中,Oracle 会自动的引用该索引,先从索引表中查询出符合条件记录的 ROWID,由于 ROWID 是记录的物理地址,因此可以根据 ROWID 快速的定位到具体的记录,当表中的数据非常多时,引用索引带来的查询效率非常可观 。

---索引【面试 常问】
--索引的概念:索引就是在表的列上构建一个二叉树 ,如书本的目录
---达到大幅度提高查询效率的目的,但是索引会影响增删改的效率。
--单列索引
--创建单列索引
create index idx_ename on emp(ename);
--单列索引触发规则,条件必须是索引列中的原始值。
--单列函数,模糊查询,都会影响索引的触发
select * from emp where ename='MARTIN';
--复合索引
create index idx_enamejob on emp (ename,job);
---复合索引中第一列为优先检索列
---如果要触发复合索引,必须包含有优先检索列中的原始值
select * from emp where ename='MARTIN' and job='SALESMAN'; --触发复合索引
select * from emp where ename='MARTIN' or job='SALESMAN'; --不触发索引
select * from emp where ename='MARTIN';--触发单列索引

三、PL/SQl编程语言

Oracle PL/SQL 语言(Procedural Language/SQL)是结合了结构化查询与 Oracle 自身过程控制为一体的强大语言, PL/SQL 不但支持更多的数据类型,拥有自身的变量声明、赋值语句,而且还有条件、循环等流程控制语句。过程控制结构与 SQL 数据处理能力无缝的结合形成了强大的编程语言,可以创建过程和函数以及程序包等。

---PL/SQl编程语言
--PL/SQl编程语言是对sql语言的扩展,使得sql语句具有过程化编程的特性
--PL/SQl编程语言比一般的过程化编程语言,更加灵活高效
--PL/SQl编程语言主要用来编写存储过程和存储函数等。
/*语法
注意:
1.每个语句结束都需要 ”;“
2.输出语句中间连接需要 ||
声明方法
--赋值操作可以使用 := 也可以使用 select into 
declare
这里放变量 赋值
begin
  这里执行语句
  end;*/
declare
  i number(3) := 100;
  s varchar2(10) :='小明啊';
  d date := sysdate;
  ena emp.ename%type;--引用类型
  emprow emp%rowtype;--引用对象
begin 
  dbms_output.put_line(i);
  dbms_output.put_line(s);
  dbms_output.put_line(d);
  select ename into ena from emp where empno=7900;
  dbms_output.put_line(ena);
  select * into emprow from emp where empno=7900;
  dbms_output.put_line(emprow.ename ||'的工作是'|| emprow.job );
end;

---PL/SQl中的if判断
/*语法
if then
  
elsif 变量 then
    执行语句
else
end  if;*/
      
    
--输入小于18的数字,输出为未成年
--输入大于18小于40的数字,输出为中年人
--出入大于40的数字,输出为老年人
declare
 i number(3) := ⅈ
begin
  if i<18 then
  dbms_output.put_line('未成年');
  elsif i<40 then
  dbms_output.put_line('中年人');
  else
  dbms_output.put_line('老年人');
  end if;
end;

---PL/SQl中的三种循环
--循环输出1-10
--第一种 while循环
declare
i number(2) :=1;
begin
  while i<11 loop
   dbms_output.put_line(i);
   i:=i+1;
  end loop;
end;
--第二种 exit循环
declare
i number(2) :=1;
begin
  loop
    exit when i>10; 
      dbms_output.put_line(i);
      i:=i+1;
    end loop;
end;
--第二种for循环
declare

begin
  for i in 1..10 loop
     dbms_output.put_line(i);
  end loop;
end;

四、游标

Oracle游标是通过关键字CURSOR的来定义一组Oracle查询出来的数据集,类似数组一样,
把查询的数据集存储在内存当中,然后通过游标指向其中一条记录,通过循环游标达到循环数据集的目的。
游标的种类
Oracle游标可以分为显式游标和隐式游标两种之分。
显式游标:指的是游标使用之前必须得先声明定义,一般是对查询语句的结果事进行定义游标,然后通过打开游标循环获取结果集内的记录,或者可以根据业务需求跳出循环结束游标的获取。
循环完成后,可以通过关闭游标,结果集就不能再获取了。全部操作完全由开发者自己编写完成,自己控制。
隐式游标:指的是PL/SQL自己管理的游标,开发者不能自己控制操作,只能获得它的属性信息。


--游标:可以存放多个对象,多行记录
---输出emp表中所有员工的姓名
declare
 cursor cl is select * from emp;
 emprow emp%rowtype;
begin
  open cl;
  loop 
    fetch cl into emprow;
    exit when cl % notfound;
    dbms_output.put_line(emprow.ename);
  end loop;
  close cl;
end;

---使用游标 给指定部门10员工涨200工资
declare
 cursor c2(eno emp.deptno%type)
 is select empno from emp where deptno =eno;
 en emp.empno%type;
begin
  open c2(10);
   loop
     fetch c2 into en;
     exit when c2 % notfound;
     update emp set sal=sal+200 where empno=en;
     commit;
   end loop;
  close c2;
end;
--查询部门10的工作
select * from emp where deptno=10;
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-16 17:44:46  更:2021-12-16 17:44:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:59:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码