一个应用程序,用同一个oracle用户登录到数据库中,要求在不同的会话中对同一个视图按进行操作
如:CREATE OR REPLACE VIEW V_TABLE AS
SELECT * FROM TABLE WHERE ID = :ID;(:ID可以是一个ORACLE的变量)
能不能在每次会话开始将:ID设置为一个本会话特定的值,这样每个会话查询的视图记录就会不一样,
但视图定义的语法还是一样的?
如:CREATE OR REPLACE VIEW V_TABLE AS
SELECT * FROM TABLE WHERE ID = :ID;(:ID可以是一个ORACLE的变量)
能不能在每次会话开始将:ID设置为一个本会话特定的值,这样每个会话查询的视图记录就会不一样,
但视图定义的语法还是一样的?
在ORACLE里能不能定义这样一个针对某个用户的变量,它可以在本用户不同会话中设置并保持不同的值,而且这个值可以在这个用户定义的视图中引用!
----------
1
2
3
4
5
6
7
8
9
10
11 COLB
----------
12
13
14已选择14行。已用时间: 00: 00: 00.80
SQL> drop table t;表已丢弃。已用时间: 00: 00: 00.61
SQL> create table t(sid number,id number);表已创建。已用时间: 00: 00: 00.50
SQL> create or replace view v_tb as select * from tb where colb<(select max(id) from t where userenv
('sessionid')=sid);视图已建立。已用时间: 00: 00: 00.31
SQL> select * from v_tb;未选定行已用时间: 00: 00: 00.30
//插入条件 选择colb<10的信息
SQL> insert into t values(userenv('sessionid'),10);已创建 1 行。已用时间: 00: 00: 00.20
SQL> select * from v_tb; COLB
----------
1
2
3
4
5
6
7
8
9已选择9行。已用时间: 00: 00: 00.40
SQL> //重新开一个sessionSQL*Plus: Release 8.1.7.0.0 - Production on 星期四 10月 20 09:22:11 2005(c) Copyright 2000 Oracle Corporation. All rights reserved.
连接到:
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
会话已更改。SQL> insert into t values(userenv('sessionid'),6);已创建 1 行。已用时间: 00: 00: 00.30
SQL> select * from v_tb; COLB
----------
1
2
3
4
5已用时间: 00: 00: 00.20
SQL> 这样,每次session连接后,插入t表一条信息即可。
注:先删除后插入
delete from t where sid=userenv('sessionid');
insert into t values(userenv('sessionid')..);OK!
我明白你的意思啦:
建一个SESSIONID与某个值关联的表,在每次session连接后插入一条SESSIONID与某个值关联记录,
在视图定义时用SID与SESSIONID关联就OK了!
还有一个问题,SESSIONID应该是唯一的吧,那样我就可以不用MAX(ID)了吧?
是为了保险起见而使用了max(id)
:)