在构建视图时为了提高SQL的查询性能,有时会通过限定子查询的查询结果数据量的方式实现,若是Oracle数据库可以借用Package的变量来进行视图动态传参查询。网络上有众多介绍该方式的博文,但大多方案在使用时会发现存在第一次连接查询时不传参导致查询结果为空的问题,遂基于该问题进行改进。
- 首先我们需要构建一个Package用于参数的传递,例如我们需要传递 month_id 月份和 org_id 组织ID两个参数,
/***
包的声明
***/
CREATE OR REPLACE PACKAGE [Schemas]."P_VIEW_PARAM" is --[Schemas] 替换对应的Schemas
function set_orgid_param(orgId varchar2) return varchar2;
function get_orgid_param return varchar2;
function set_monthid_param(monthid number) return number;
function get_monthid_param return number;
end p_view_param;
/***
构建包体
***/
CREATE OR REPLACE PACKAGE BODY [Schemas]."P_VIEW_PARAM" as --[Schemas] 替换对应的Schemas
paramValue varchar2(50); --组织ID
paramValue1 number; --年月ID
--设置组织ID方法
function set_orgid_param(orgId varchar2) return varchar2 is
begin
paramValue:=orgId;
return orgId;
end;
--获取组织ID方法
function get_orgid_param return v