暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何使用参数创建视图

askTom 2017-08-10
210

问题描述

嗨,

如何使用参数创建视图?

我们要创建视图定义如下,

create view test_item_v
as 
select item_class,
nvl(rev_id,v_rev_id),
sum(total_cost),
sum(total_resale),
sum(margin)
from test_item_class
where rev_id = v_rev_id;
复制


请建议。

谢谢。

专家解答

你不能。添加参数化视图是数据库思想论坛上更受欢迎的建议之一:

https://community.oracle.com/ideas/11316

你可以接近sys_context。虽然您需要在查询视图之前调用它来设置值:

create table t (
  x int
);
insert into t 
  select rownum x from dual
  connect by level <= 10;

commit;

create or replace context ctx using ctx_api;

create or replace package ctx_api as

  procedure set_filter(val in varchar2);
  
end ctx_api;
/

create or replace package body ctx_api is

  procedure set_filter(val in varchar2) is
  begin
    dbms_session.set_context('CTX', 'filter', val);
  end set_filter;

end ctx_api;
/

create or replace view vw as 
  select * from t
  where  x = sys_context('CTX', 'filter');
  
exec ctx_api.set_filter(1);

select * from vw;

X  
1  

exec ctx_api.set_filter(2);

select * from vw;

X  
2  
复制


它不会在所有情况下都起作用。https://dba.stackexchange.com/q/21644/2264

或者您可以使用 (临时) 表来解决它。尽管同样,这需要您首先初始化数据,但可能并不总是合适的:

create global temporary table tmp (
  x int
);

create or replace view vw as 
  select * from t
  where  t.x = (select tmp.x from tmp);
  
insert into tmp values (3);
select * from vw;

X  
3  
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论