Oracle数据库学习 视图、序列及存储过程

视图(View)
视图也被称作虚表,也就是虚拟的表,是一组数据的逻辑表示。
视图对应一个select语句,结果集被赋予一个名字,也就是视图的名字。
视图本身不包含任何数据,它只是包含映射到基表的一个查询语句,当基表数据发声变化,视图数据也随之变化。
视图创建后,可以像操作表一样操作视图,主要是查询。

根据视图所对应的子查询种类分为几种类型:
select语句是基于单表建立,并且不包含任何函数运算、表达式或者分组函数,叫做简单视图,此时视图是基表的子集。
select语句是基于单表建立,但是包含了单行函数、表达式、分组函数或者group by子句,叫做复杂视图。
select语句是基于多个表,叫做连接视图。

视图的作用:
如果需要经常执行某种复杂查询,可以基于这个复杂查询建立视图,以后查询此视图即可,可以简化复杂查询。
视图本质上就是一条select语句,所以当访问视图时只能访问到对应的select语句中涉及到的列,对基表中的其它列起到安全和保密的作用,限制数据的访问。

对scott用户授权(在sysdba角色下)
grant create view to scott;

创建视图(用户必须有创建视图的权限)
create or replace view v_emp
as
select ename,sal from emp;

查看视图结构
desc v_emp;

删除视图
drop view v_emp;

查询视图中的数据:
select * from v_emp;

--------------------------------------------------------------------------------------------
序列(sequence)
用在哪里?
在mysql数据库中,可以设置id字段以自动增长的方式,实现数据的插入
create table mysql_tbl(
id int primary key auto_increment,
name varchar(100)
)

在oracle中使用序列实现mysql表中id字段自动增长
序列是oracle中的一种对象
create sequence seq_user --创建序列的关键字和序列名称
increment by 1 --自动增加的步长 默认1
start with 1 --开始的大小值 默认1
-- maxvalue|minvalue num --最大值和最小值 默认nomaxvalue 默认的最大值是10^26
nomaxvalue --默认的不限制最大值
-- cycle|nocycle --是否轮回 默认nocycle
cycle
-- cache num|nocache --缓存区大小 默认20
cache 3

使用序列
select seq_user.nextval from dual;

select seq_user.currval from dual;

删除序列
drop sequence seq_user;

建表
create table t_user(id number,username varchar2(100),password varchar2(48),regtime date,constraint pk_user primary key(id));

insert into t_user values (seq_user.nextval,‘Owen‘,‘123123‘,sysdate);

---------------------------------------------------------------------------------------

需要一张表t_product
编号 主键 自动增长
产品名称 非空
产品销量 非空 默认0
产品库存 非空 默认0
产品初始化销量

创建表
create table t_product(
p_no number,
p_name varchar2(100) not null,
p_sal_num number default 0,
p_has_num number default 0,
p_sal_num_start number,
constraint pk_product primary key(p_no)
);

创建序列
create sequence seq_product --创建序列的关键字和序列名称

插入5条数据
insert into t_product values(seq_product.nextval,‘苹果5s‘,128,200,110);
insert into t_product values(seq_product.nextval,‘苹果6‘,88,150,0);
insert into t_product values(seq_product.nextval,‘苹果6s‘,98,100,50);
insert into t_product values(seq_product.nextval,‘苹果6plus‘,128,200,110);
insert into t_product values(seq_product.nextval,‘苹果7‘,99,0,99);

建立视图(不显示产品初始化销量)
create or replace view v_product
as
select p_no,p_name,p_sal_num,p_has_num from t_product;

查询视图
select * from v_product;

从视图插入一条数据
insert into v_product values(seq_product.nextval,‘苹果8‘,0,0);

------------------------------------------------------------------------------------------

存储过程
存储过程适合做更多操作,特别是大数据量的更新

创建存储过程
create or replace procedure proc1
as|is 相当于 declare 声明的意思
abc varchar2(100); --定义该存储过程的变量,作用域就是本存储过程中
begin
update t_user set username=‘老王‘ where id=3;
commit;
end;
/

例如:
create or replace procedure proc1
as
begin
update t_user set username=‘老王‘ where id=3;
commit;
end;
/
调用存储过程
exec proc1;
----------------------------------------------------------------------------------------------
带输入参数的存储过程
创建存储过程
create or replace procedure proc2(
param1 varchar2,param2 varchar2 --存储过程的参数 类型不需要指定宽度(范围)
)
as
begin
insert into t_user values(seq_user.nextval,param1,param2,sysdate);
commit;
end;
/

执行
exec proc2(‘Owen‘,‘121212‘);
call proc2(‘Haha‘,‘111111‘); --在dos窗口下可以

------------------------------------------------------------------------------------------------

带输出参数的存储过程
create or replace procedure proc3(
param1 in varchar2,param2 out varchar2 --in代表输入参数,out代表输出参数,param0 in out number
)
as
begin
select password into param2 from t_user where username=param1;
dbms_output.put_line(param2);
commit;
end;
/

执行
set serverout on;
var pp varchar2(100);
exec proc3(‘tom‘,:pp);

------------------------
查询结果返回多个字段的存储过程
create or replace procedure proc4(
param1 in varchar2,param2 out varchar2,param3 out varchar2 --in代表输入参数,out代表输出参数,param0 in out number
)
as
begin --注意:这里只能处理返回的是一条记录结果集,如果结果集含有多条记录,oracle没有提供直接处理的方式,
--必须间接的接触游标,游标本身的效率很差,所以实际开发中基本上不使用
select id,password into param2,param3 from t_user where username=param1;
dbms_output.put_line(‘查询的结果数据是:id=‘||param2||‘password=‘||param3);
commit;
end;
/

执行
set serverout on;
var pp1 varchar2(100);
var pp2 varchar2(100);
exec proc4(‘tom‘,:pp1,:pp2);
---------------------------------------------------------------------
定义变量
param1 varchar2(100); --变量的类型可以是oracle系统的所有合法的数据类型
param2 number;

给变量赋值
param1 :=‘who am i!‘;
param2 :=123;

判断
if t_value = 1 then
begin
do...
end;
end if;
-------------------------------------------
create or replace procedure proc_if(pp in number)
as
total number;
begin
total := pp;
if total <4 then
begin
insert into t_user values(seq_user.nextval,‘苏乞儿‘,‘666666‘,sysdate);
commit;
end;
end if;
end;
/

exec proc_if(5);

--------------------------------------------

while循环
while t_value = 1 loop
begin
do...
end;
end loop;

create or replace procedure proc_while
as
i number;
begin
i:=1;
while i<100 loop
dbms_output.put_line(i);
i:=i+1;
end loop;
end;
/

exec proc_while;
-----------------------------------
for y in 1..100 loop
i:=x*y;
exit when i = 300;
end loop;

create or replace procedure proc_for(pp in number)
as
x number;
i number;
begin
x:=pp;
for y in 1..100 loop
i:=x*y;
exit when i>300;
dbms_output.put_line(i);
end loop;
end;

exec proc_for(6);

时间: 2024-10-20 20:06:45

Oracle数据库学习 视图、序列及存储过程的相关文章

Oracle数据库学习第一天

crud 增删改查 create read update delete1--oracle数据库的安装 系统默认创建两个用户 sys和system 密码自定义 超级管理员:sys 管理员:system 密码:56152--启动数据库的服务 service listener 3--访问数据库 使用oracle自带的客户端工具sqlplus(前提条件:在path中添加D:\oracle\app\oracle\product\11.2.0\server\bin) wind+R键 打开运行窗口 输入:sq

Oracle数据库学习笔记

创建表的同时插入数据:create table zhang3 as select * from zhang1;create table zhang3(id,name) as select * from zhang1; 将查询数据插入到某个表中:insert into zhang3 select * from zhang1;insert into zhang3(id,name) select * from zhang1; 有关完整性约束,表名,列名的两个视图:user_constraints, u

Oracle数据库学习笔记(一)

Oracle以其跨平台操作系统和硬件平台.稳定性.安全性.性能优越而著称于世.主要包括两个方向: 1).数据库管理员方向,主要学习对Oracle本身进行管理,提升性能,优化数据存储结构: 2).数据库程序员方向,在Oracle基础上对Oracle进行程序开发. PL/SQL是Oracle公司对关系型数据库的标准语言SQL的过程化语言扩展,特征包括:变量定义.控制结构.自定义的子程序.对象类型. PL/SQL程序的最基本的组成单元是PL/SQL块,分为:匿名块.命名块.命名块又可分为子程序.包.触

Oracle数据库学习小结(一)

今天要跟大家来聊一聊俺在使用Oracle数据库的这段时间里面学到的一些知识. 俺最近出来工作了,来到的公司是使用的Oracle数据库,之前一直使用的是SQL的数据库,在性质上二者前者是收费的,后者是开源的:在使用上主要还是靠自己探索,下面说说俺的一些收获.在前段时间俺一直在鼓捣组长分下来的一个任务,定时同步数据的一个小程序,俺的Oracle之旅也是从这里才算是正式开始的. 近期的学习中俺了解到Oracle数据库本身是自带三个默认用户的:sys(网络管理员).system(本地普通管理员).sco

Oracle数据库学习(一)

Oracle数据库由甲骨文公司开发,是基于对象的关系型数据库:下面是简单的学习数据库操作等知识. 1.SQL单表查询(设一个表名为tab) (1)查询所有记录 select * from tab(一般格式:用户名.表名:如果不输入用户名,则默认为当前用户). (2)查询某些字段 select f_z from tab (f_z为查询字段,可以查询多个字段,以','隔开). (3)distinct(返回不同值) select distinct f_z from tab (distinct必须放在前

oracle数据库学习路线

1.基础篇   (1)概述   (2)数据库服务器的安装与卸载   (3)创建数据库   (4)OEM和SQL*plus       2.体系结构篇   (1)物理存储结构   (2)逻辑存储结构   (3)数据库实例       3.管理篇   (1)数据库启动与关闭   (2)模式对象   (3)安全管理   (4)备份与恢复   (5)闪回技术       4.应用开发篇   (1)SQL语言基础   (2)PL/SQL语言基础   (3)PL/SQL程序设计   (4)基于oracle数

Oracle数据库学习笔记1(11g版本的安装&amp;PL/SQL工具的安装和使用)

1.安装Oracle11g 1.1 .口令就是数据库登录密码,学生党用口令就设置简单点了,违反Oracle口令设置规则也可以继续下一步 1.2 Oracle默认给三个账户用户scott(普通用户),需要在安装界面的时候把锁定取消,后面给上口令密码.SYS用户:超级管理员,权限最高,它的角色是DBA.默认密码是change_on_install.具有创建数据库的权限.我安装的时候口令统一设置了****.SYSTEM用户:系统管理员,权限很高,它的角色是DBA operator,默认密码manage

Oracle数据库学习

数据库(DB) 数据库是长期存储在计算机内.有组织.可共享的大量数据的集合.数据库中的数据按照一定的数据模型进行组织.描述和存储.具有较小的冗余度.较高的数据独立性和以扩展性,并可以为所有的用户共享.所以数据库具有永久存储.有组织.可共享3个基本特点. DBMS 科学地组织和存储数据.可以高效地获取和维护的数据.DBMS和OS一样是计算机的系统软件,也是一个大型的系统软件,主要功能有: 数据操作功能(DML): 数据定义功能(DDL): 数据组织.存储和管理: 数据库的创建和维护. DBS 在计

Oracle数据库学习1--简介,基本了解

基于已经接触过关系型数据库 SQL Server,对数据库.表.记录.表的增删改查操作等这些基本的概念已经了解.Oracle是基于对象的关系型数据库,Oracle也是用表的形式对数据存储和管理,并且Oracle增加了一些面向对象的思想. Oracle 数据库是 Oracle(中文名称叫甲骨文)公司的核心产品,Oracle 数据库是一个适合于大中型企业的数据库管理系统.在所有的数据库管理系统中 (比如:微软的 SQL Server,IBM 的 DB2 等) ,Oracle 的主要用户涉及面非常广,