Oracle 视图传参详解(通过 全局变量 实现)

1 结论

通过 package 中的 '全局变量' 来实现
(1) 设置 set()
(2) 获取 get()

2 查询演示

-- 查询 聘用日期范围 内的员工信息
select *
  from scott.vw_emp t
 where scott.pkg_view_param.set_start_date('1980-12-17') = 'OK'
   and scott.pkg_view_param.set_end_date('1981-4-2') = 'OK';

查询结果:
在这里插入图片描述
与以下同等:(视图查询时,不用关注 ‘hiredate’ 这个字段)

select * 
  from scott.emp t
 where t.hiredate >= date '1980-12-17'
   and t.hiredate < date '1981-04-02' + 1;

3 源码

3.1 创建 view

-- 日期参数视图,字符、数值 参数同理
CREATE OR REPLACE VIEW scott.vw_emp AS
SELECT e.empno, e.ename, e.job, e.hiredate
  FROM scott.emp e
 WHERE e.hiredate >= scott.pkg_view_param.get_start_date()
   AND e.hiredate < scott.pkg_view_param.get_end_date() + 1;

3.2 创建 package

package head:

CREATE OR REPLACE PACKAGE scott.pkg_view_param IS
   FUNCTION set_start_date(i_start_date VARCHAR2) RETURN VARCHAR2;
   FUNCTION set_end_date(i_end_date VARCHAR2) RETURN VARCHAR2;
   FUNCTION set_id(i_id NUMBER) RETURN VARCHAR2;
   FUNCTION set_name(i_name VARCHAR2) RETURN VARCHAR2;

   FUNCTION get_start_date RETURN DATE;
   FUNCTION get_end_date RETURN DATE;
   FUNCTION get_id RETURN NUMBER;
   FUNCTION get_name RETURN VARCHAR2;
END pkg_view_param;
/

package body:

CREATE OR REPLACE PACKAGE BODY scott.pkg_view_param IS
   -- 全局变量
   g_start_date DATE;
   g_end_date   DATE;
   g_id         NUMBER;
   g_name       VARCHAR2(100);

   -- 时间参数
   FUNCTION set_start_date(i_start_date VARCHAR2) RETURN VARCHAR2 IS
   BEGIN
      g_start_date := to_date(i_start_date, 'YYYY-MM-DD');
      RETURN 'OK'; -- 自定义 or RETURN i_start_date   
   END set_start_date;

   FUNCTION set_end_date(i_end_date VARCHAR2) RETURN VARCHAR2 IS
   BEGIN
      g_end_date := to_date(i_end_date, 'YYYY-MM-DD');
      RETURN 'OK';
   END set_end_date;

   -- 数值参数
   FUNCTION set_id(i_id NUMBER) RETURN VARCHAR2 IS
   BEGIN
      g_id := i_id;
      RETURN 'OK';
   END set_id;

   -- 字符参数
   FUNCTION set_name(i_name VARCHAR2) RETURN VARCHAR2 IS
   BEGIN
      g_name := i_name;
      RETURN 'OK';
   END;

   ----- get() -----
   FUNCTION get_start_date RETURN DATE IS
   BEGIN
      RETURN g_start_date;
   END get_start_date;

   FUNCTION get_end_date RETURN DATE IS
   BEGIN
      RETURN g_end_date;
   END get_end_date;

   FUNCTION get_id RETURN NUMBER IS
   BEGIN
      RETURN g_id;
   END get_id;

   FUNCTION get_name RETURN VARCHAR2 IS
   BEGIN
      RETURN g_name;
   END get_name;
END pkg_view_param;
/

3.3 emp 表

  • Oracle 内置表,如下截图:

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼丸丶粗面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值