视图(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);
原文:http://www.cnblogs.com/xujianbo/p/4921692.html