问题描述
嗨,
如何使用参数创建视图?
我们要创建视图定义如下,
请建议。
谢谢。
如何使用参数创建视图?
我们要创建视图定义如下,
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。虽然您需要在查询视图之前调用它来设置值:
它不会在所有情况下都起作用。https://dba.stackexchange.com/q/21644/2264
或者您可以使用 (临时) 表来解决它。尽管同样,这需要您首先初始化数据,但可能并不总是合适的:
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。