3

我是 Oracle 的新手,我遇到了以下问题。为什么我必须双引号模式名称和表名才能从表中查询?有什么设置可以改变吗?

谢谢。

SQL> conn sys/ogrish@orcl as sysdba
Connected.
SQL> show user
USER is "SYS"
SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

SQL> select * from m.album;
select * from m.album
                *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> select * from M.Album where rownum < 2;
select * from M.Album where rownum < 2;
              *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select * from "M"."Album" where rownum < 2;

   AlbumId Title
---------- ----------------------------------------------------------------------
         1 For Those About To Rock We Salute You

SQL> conn m/m@orcl
Connected.
SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
Album
Artist
Customer
Employee
Genre
Invoice
InvoiceLine
MediaType
Playlist
PlaylistTrack
sysdiagrams

TABLE_NAME
------------------------------
Track

12 rows selected.

SQL> select * from album where rownum < 2;
select * from album where rownum < 2;
              *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> select * from Album where rownum < 2;
select * from Album where rownum < 2
              *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> select * from m.album where rownum < 2;
select * from m.album where rownum < 2
                *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> select * from M.Album where rownum < 2;
select * from M.Album where rownum < 2
                *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> select * from "M"."Album" where rownum < 2;

   AlbumId Title
---------- ----------------------------------------------------------------------
         1 For Those About To Rock We Salute You

SQL> select * from "Album" where rownum < 2;

   AlbumId Title
---------- ----------------------------------------------------------------------
         1 For Those About To Rock We Salute You

SQL>
4

2 回答 2

5

您不必在模式名称上添加双引号,但您必须在表名上添加双引号,因为您使用引号创建了它(这使其区分大小写):

select * from M."Album"

也应该工作。否则 M.Album 默认翻译为 M.ALBUM - 并且表 ALBUM 不存在。

于 2012-08-17T06:58:22.180 回答
0

您可以通过使用同义词来避免预先固定模式名称的需要。

于 2012-08-17T08:01:51.627 回答