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);
Oracle数据库学习 视图、序列及存储过程的更多相关文章
- Oracle数据库之视图与索引
Oracle数据库之视图与索引 1. 视图简介 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改. 视图基于的表称为基表,视图是存储在数据字典里的一条SE ...
- 推荐一个Oracle数据库学习网站
推荐一个我个人的Oracle数据库学习网站,比较系统性的整理,会持续更新的网站.网址: Oracle基础教程: http://www.oraclejsq.com/article/010100110.h ...
- ORACLE数据库学习之逻辑结构
逻辑结构 数据库逻辑结构包含表空间.段.范围(extent).数据块和模式对象. (一)表空间 一个数据库划分为一个或多个逻辑单位,该逻辑单位称为表空间类似于sybase下的设备.(TABLES ...
- ORACLE数据库学习之体系结构
Oracle体系结构 ORACLE数据库体系结构决定了oracle如何使用网络.磁盘和内存.包括实例(instance),文件(file)和进程(process不包括后台进程)三部分. 实例:每 ...
- oracle数据库学习记录(持续更新中...)
--------------------------------------------day1------------------------------------------------- 1. ...
- Oracle数据库学习第一天
crud 增删改查 create read update delete1--oracle数据库的安装 系统默认创建两个用户 sys和system 密码自定义 超级管理员:sys 管理员:system ...
- Oracle数据库学习笔记
创建表的同时插入数据:create table zhang3 as select * from zhang1;create table zhang3(id,name) as select * from ...
- oracle 数据库中的序列
序列是什么,通俗点说,序列就是按照一定顺序进行排列,序列会自动给你递增,生成唯一的序列号: oracle数据库不同于sqlServer数据库,oracle数据库中是没有自增长列,使用的是sequenc ...
- Oracle数据库学习笔记(一)
Oracle的体系结构大体上分为两部分:Instance(实例)和Database(数据库). Instance(实例) :在Oracle Instance中主要包含了SGA以及一些进程(例如:P ...
随机推荐
- nini
using Nini.Ini; using Nini.Config; IniDocument doc = new IniDocument("Settings.ini", IniFi ...
- Jquery UI dialog 详解 (中文)
转载▼ 1 属性 1.11 autoOpen ,这个属性为true的时候dialog被调用的时候自动打开dialog窗口.当属性为false的时候,一开始隐藏窗口,知道.dialog("op ...
- ASCII,Unicode和UTF-8字符编码
ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是 ...
- Spring之HelloWorld再起
第一步:打开File->New->Other…,选择Java Project,创建标准Java项目. 第二步:在项目下添加lib文件夹用于存放jar文件,resources用于存放xml配 ...
- ManagerDay-1
初做管理,没有任何管理经验的我,有点紧张,在来公司之前,脑子里一直在想能不能胜任这份工作. 想着能否做出合格的流程图,像样的需规.我该如何和组内开发人员打好交道.报价预算该如何做,这些都交织在脑内显得 ...
- [ZETCODE]wxWidgets教程九:组件专题2
本教程原文链接:http://zetcode.com/gui/wxwidgets/widgetsII/ 翻译:瓶哥 日期:2013年12月15日星期日 邮箱:414236069@qq.com 主页:h ...
- pci转并口卡的安装使用
pci转并口卡模拟出来的并口并不能完全等同于主板上真正的并口.真正的并口打印的时候可以“直接瓶口输出”打印,而不需要安装打印驱动程序. 这个模拟出来的并口却不能使用“直接瓶口输出”(打印机不打印,程序 ...
- jsp+urlrewrite实现html分页简单粗暴实现
今天去检查一同事写的一分页实现,看了有点郁闷,都说了要换成html实现方便搜索引擎收录,他还是用的js,真是晕.还得帮他解决 好吧.言归正传,我在他的基础上粗暴的修改了下,达到了基本的效果,带数字分页 ...
- 有用的javascript外部文件或其他外部文件引用
1.<link href='http://fonts.googleapis.com/css?family=PT+Sans+Narrow' rel='stylesheet' type='text/ ...
- Android中使EditText失去焦点,edittext禁止弹出键盘[转]
转自http://www.cnblogs.com/yejiurui/archive/2013/01/02/2841945.html 在我们的应用中,有时候一进入一个页面, EditText默认就会自动 ...