在Oracle中创建带参数的视图

1.通常oracle的视图是不能带参数的,但有时候可以通过变通来实现。比如创建了一个视图

CREATE OR REPLACE VIEW REVENUE_STATISTICS AS
SELECT *  FROM A

2.如果需要给定where条件 where a.year='2014',这时候可以通过创建包和包体来实现设置和传递参数

//创建包

create or replace package p_view_param is

  function set_param(num number) return number;

  function get_param return number;

end p_view_param;

//创建包体

create or replace package body p_view_param is

paramValue number;

function set_param(num number) return number is

begin

paramValue := num;

return num;

end;

function get_param return number is

begin

return paramValue;

end;

end p_view_param;

 

3.然后修改视图语句

CREATE OR REPLACE VIEW REVENUE_STATISTICS AS
SELECT *  FROM A  WHERE A.YEAR = p_view_param.get_param()

4.调用slq语句

SELECT * FROM REVENUE_STATISTICS WHERE P_VIEW_PARAM.SET_PARAM(2014)=2014

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle ,你可以创建参数视图参数视图可以接受一个或多个输入参数,并根据这些输入参数动态生成视图的结果集。要创建参数视图,需要使用 PL/SQL 函数来定义视图的查询语句。 以下是创建参数视图的一般步骤: 1. 创建一个 PL/SQL 函数,该函数接受一个或多个输入参数,并返回一个 `SELECT` 查询语句的字符串。 ```sql CREATE OR REPLACE FUNCTION my_view_func(p_param1 IN VARCHAR2, p_param2 IN NUMBER) RETURN VARCHAR2 AS v_query VARCHAR2(4000); BEGIN v_query := 'SELECT col1, col2, col3 FROM my_table WHERE col4 = ''' || p_param1 || ''' AND col5 = ' || p_param2; RETURN v_query; END; ``` 在上面的示例,我们创建了一个名为 `my_view_func` 的函数,该函数接受两个参数 `p_param1` 和 `p_param2`,并返回一个 `SELECT` 查询语句的字符串。该查询语句查询 `my_table` 表 `col4` 等于参数 `p_param1`,且 `col5` 等于参数 `p_param2` 的记录。 2. 创建一个视图,该视图调用上述 PL/SQL 函数,并将输入参数传递给该函数。 ```sql CREATE OR REPLACE VIEW my_view (col1, col2, col3) AS SELECT col1, col2, col3 FROM TABLE(DBMS_SQL.PARSE(my_view_func('parameter1', 123), DBMS_SQL.NATIVE)); ``` 在上面的示例,我们创建了一个名为 `my_view` 的视图,该视图调用了 `my_view_func` 函数,并将参数 `parameter1` 和 `123` 传递给该函数。最终,该视图的结果集会根据传递的参数动态生成。 需要注意的是,在使用参数视图时,需要传递正确的参数类型和值,否则会导致查询失败或产生错误的结果集。希望这能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值