您的位置:首页 > 其它

动态创建VIEW

2014-08-25 23:20 127 查看
很多人都应该知道 global temporary table 的用法,这里也提出一个动态VIEW的用法,在实际过程中有着很好的独特之处

具体如下:

/***************创建PACKAGE ****************/

create or replace package p_view_temp_value is

g_org_id varchar2(60);

g_product_number varchar2(60);

g_dep_id varchar2(60);

procedure set_org_id(l_orgid varchar2,l_product_number varchar2,l_dept varchar2);

function get_id return varchar2;

function get_product return varchar2;

function get_dep_id return varchar2;

end p_view_temp_value;

/***************创建PACKAGE ****************/

create or replace package body p_view_temp_value Is

procedure set_org_id(l_orgid varchar2,l_product_number varchar2,l_dept varchar2) is

begin

g_org_id:=l_orgid;

g_product_number:=l_product_number;

g_dep_id:=l_dept;

end;

function get_id return varchar2 is

v_value varchar2(60);

begin

v_value:=g_org_id;

return v_value;

end;

function get_dep_id return varchar2 is

v_value varchar2(60);

begin

v_value:=g_dep_id;

return v_value;

end;

function get_product return varchar2 is

v_value varchar2(60);

begin

v_value:=g_product_number;

return v_value;

end;

end p_view_temp_value;

/****************创建动态视图******************/

create or replace view view_demo

(org_id,.....)

as

select org_id,......

from t_org_info where org_id=p_view_temp_value.get_id

;

注意此处的条件是利用PACKAGE的函数,这样可以达到条件的动态化,而且利用的PACK的特点,使这个试图的条件具有SESSION特性,

在执行此VIEW查询的时候,需要先执行 p_view_temp_value.set_org_id('001','','');

这样视图V_DEMO查询的就是 select org_id ... from t_org_info where org_id='001';

而且必须是在一个SESSION里,不同的SESSION查询出来的是不一样的,这也就说明了他的动态性,只要在不同的SESSION里就具有不同的结果集,这个特点跟GLOBAL TEMPORARY TABLE很类似
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: