1. 视图
1)基础概念
- 视图是一种 虚拟表 ,本身是 不具有数据 的,占用很少的内存空间。
- 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。
- 在大型项目中,以及数据表比较复杂的情况下,视图可以帮助我 们把经常查询的结果集放到虚拟表中,提升使用效率。
2)创建视图
create or replace view <视图名称> as
select <column_name> from <table_name> where <condition_1> and <condition_2>;
我们用刚刚的a,b表创建新的视图test_ab:
create or replace view test_ab as
select a.name as a_name,
b.name as b_name,
a.sex,
b.salary
from test_a a full outer join
test_b b
on a.name= b.name;
如此,我们可以得到视图test_ab:
3)带入参数
oracle数据库不允许将参数带入视图,但是我们可以通过创建包&包体来实现传递参数:
- 创建包:
create or replace package p_view_param is
function set_param(str varchar2) return varchar2;
function get_param return varchar2;
end p_view_param;
- 创建包体:
create or replace package body p_view_param is
paramValue varchar2(40));
function set_param(str varchar2) return varchar2is
begin
paramValue := str;
return str;
end;
function get_param return varchar2is
begin
return paramValue;
end;
end p_view_param;
现在,我们可以在视图中引入参数作为a的名字:
create or replace view test_ab as
select * from test_a a where a.name = p_view_param.get_param()
查询时,我们只需:
select * from test_ab where p_view_param.set_param('a') = 'a'
*注:这种带参查询法只能逐条带入,不可以多条带入。如:
select * from test_ab where p_view_param.set_param('a', 'b') = 'a', 'b'
这种是不可行的。
4)sysdate
在视图里,我们如果对某个字段分配sysdate作为日期,那么每一次我们引用视图的时候,该字段的日期都会更新,并不会固定在第一次创建时间,因为视图是虚拟的表。
*参考资料:SQL视图_明明的demo日常的博客-CSDN博客在Oracle中创建带参数的视图_视图能带参数吗_吴勇356181020的博客-CSDN博客