一个应用程序,用同一个oracle用户登录到数据库中,要求在不同的会话中对同一个视图按进行操作
如:CREATE OR REPLACE  VIEW V_TABLE AS
SELECT * FROM TABLE WHERE ID = :ID;(:ID可以是一个ORACLE的变量)
能不能在每次会话开始将:ID设置为一个本会话特定的值,这样每个会话查询的视图记录就会不一样,
但视图定义的语法还是一样的?

解决方案 »

  1.   

    也就是说:
    在ORACLE里能不能定义这样一个针对某个用户的变量,它可以在本用户不同会话中设置并保持不同的值,而且这个值可以在这个用户定义的视图中引用!
      

  2.   

    SQL> select * from tb;      COLB
    ----------
             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!
      

  3.   

    bzszp(SongZip) :
    我明白你的意思啦:
    建一个SESSIONID与某个值关联的表,在每次session连接后插入一条SESSIONID与某个值关联记录,
    在视图定义时用SID与SESSIONID关联就OK了!
    还有一个问题,SESSIONID应该是唯一的吧,那样我就可以不用MAX(ID)了吧?
      

  4.   

    应该是没有问题的
    是为了保险起见而使用了max(id)
    :)