如何在 SQLPlus Oracle select 中指定 tablespace_name

How to specify tablespace_name in SQLPlus Oracle select

我的设置是这样的

SQL> SELECT tablespace_name, table_name
     FROM all_tables
     WHERE tablespace_name = 'MYSPACE';

TABLESPACE_NAME            TABLE_NAME
-------------------------- ------------------------------
MYSPACE                    MYTABLENAME
MYSPACE                    MYOTHERTABLENAME

现在我想 SELECT * FROM MYSPACE.MYTABLENAME; 但显然你不是这样做的。

ERROR at line 1:
ORA-00942: table or view does not exist

我的预期结果是从 table 中获取所有记录。如果它是 MySQL.

就像我会的一样

谢谢

您 select 来自表空间,这与您的 Owner/Schema 名称不同。这就是为什么。例如,表空间 SYSTEM 拥有所有者 SYS。你从 Sys.xxx;

做 select

好的。

SELECT owner, tablespace_name, table_name
FROM all_tables
WHERE tablespace_name = 'MYSPACE';

然后

select * from [ owner ].[ table_name ];

(值得一提:select .. 来自 dba_tables / user_tables

表不属于 table空间。 table空格是a logical storage storage structure. When you create a table (or index) you specify which tablespace its contents should be stored in。除非您正在执行 DBA 任务,否则您真的不需要知道您的数据存储在哪个 table 空间中。

您可能只是混淆了术语。表归 schemas 所有。如果您查询 owner 列而不是 tablespace_name 列,您可能会看到如下内容:

SQL> SELECT owner, table_name
     FROM all_tables
     WHERE tablespace_name = 'MYSPACE';

OWNER                      TABLE_NAME
-------------------------- ------------------------------
MYUSER                     MYTABLENAME
MYUSER                     MYOTHERTABLENAME

然后您可以使用

从中查询
SELECT * FROM MYOWNER.MYTABLENAME;

当然,如果无论如何所有者实际上是您,那么您不需要在 table 名称前加上模式;你可以 select FROM MYTABLENAME。 (您可能还拥有使模式前缀变得不必要的同义词或会话设置,但这有点离题)。如果您拥有 table,您也会在 USER_TABLES 中看到它。