因为mytable是建在你的用户下,别人如果不是以你的用户登陆,select时当然要指定表所属的用户名啦,有的时候这也是为了系统权限的管理,有的用户只能select自己登陆用户下的表,而不能跨用户进行查询

解决方案 »

  1.   

    看来你不明白我的意思。如果我以myname登陆,那么没有指定用户名的情况下,mytable当然要默认指myname.mytable 
    但是ORACLE并不支持这个这么基本的东西。
      

  2.   

    例如用户名是myname
    当使用myname用户登录的时候,可以直接用select * from mytable 
    但是用其他用户登录就要用 select * from myname.mytable了,因为其他人的帐号也可以建立mytable表啊如果你的程序拿给别人用,别人的用户名是不同的的话就不行了。如果你非要用select * from mytable 让别的帐号的话,可以建立一个全局的同义词
    create public synonym mytable for myname.mytable
    以后,你就可以在别的用户下使用select * from mytable来查询了
      

  3.   

    不行的。例如我登陆为myname
    create table table1 (field1 integer)
    那么这个table1是属于sys的。 这是不应该的做法。
    (无法理解Oracle为什么会这样!!!)
    这时可以 select * from table1如果
    create table myname.table2 (field1 integer)
    那么这个table是属于myname的,
    并且select * from table2就会出错,一定要select * from myname.table2才行。实际上,SqlServer分开database的做法就好很多。现在我要做一个系统,sql语句都是固定好了。 不可能固定用户名在那些语句中吧??
    如果要运行时要把用户名加到sql语句中,,那真是太糟糕了。
      

  4.   

    可以,但必须建public同义词
    create synonym public.table2 for myname.table2;
    select 时可以不带用户名
      

  5.   

    那还是占用公共部分。
    假如我的程序在一个服务器里,有多个实例,
    那么在SqlServer里的做法是改变连接字符串,选择不同的database就OK了。
    而Access也是这样,改变连接字符串,选择不同的文件就OK了。而因为Oracle则无法作到这点,必须要在Sql语句中制定用户名,非常麻烦。也许Oracle有相关的解决方案???例如 select * from @@user.mytable ?? 有没有 @@user 这个自动表示当前用户名的写法 ???
      

  6.   

    不指定也可以,你只要放大对方用户的权限就可以了!
    例如 DBA
      

  7.   

    回答有些欠缜密,oracle的管理规则是指定用户的,而SQLserver是制定数据库的!