加油,新时代打工人!
以下在学习Oracle数据的记录过程,以及遇到的问题。
- 【详细】 Oracle Database 19c 安装步骤
- Oracle基础入门语句
- 【详细】Oracle单行函数和多行函数
Oracle中的视图、索引、PL/SQL语言、游标
一、视图
oracle视图可以理解为数据库中一张虚拟的表,他是通过一张或者多张基表进行关联查询后组成一个虚拟的逻辑表。查询视图,本质上是对表进行关联查询。 视图的本身是不包含任何数据,只是一个查询结果,当基表的数据发生变化时,视图里面的数据也会跟着发生变化。我们经常在实际开发过程中遇到的视图可以大概分为三种:单表视图、多表关联视图、视图中含有子视图。
create table emp as select * from scott.emp;
select * from scott.emp;
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 数据处理能力无缝的结合形成了强大的编程语言,可以创建过程和函数以及程序包等。
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;
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;
declare
i number(2) :=1;
begin
while i<11 loop
dbms_output.put_line(i);
i:=i+1;
end loop;
end;
declare
i number(2) :=1;
begin
loop
exit when i>10;
dbms_output.put_line(i);
i:=i+1;
end loop;
end;
declare
begin
for i in 1..10 loop
dbms_output.put_line(i);
end loop;
end;
四、游标
Oracle游标是通过关键字CURSOR的来定义一组Oracle查询出来的数据集,类似数组一样, 把查询的数据集存储在内存当中,然后通过游标指向其中一条记录,通过循环游标达到循环数据集的目的。 游标的种类 Oracle游标可以分为显式游标和隐式游标两种之分。 显式游标:指的是游标使用之前必须得先声明定义,一般是对查询语句的结果事进行定义游标,然后通过打开游标循环获取结果集内的记录,或者可以根据业务需求跳出循环结束游标的获取。 循环完成后,可以通过关闭游标,结果集就不能再获取了。全部操作完全由开发者自己编写完成,自己控制。 隐式游标:指的是PL/SQL自己管理的游标,开发者不能自己控制操作,只能获得它的属性信息。
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;
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;
select * from emp where deptno=10;
|