如何在 Oracle 中为用户 + table 名称组合使用带引号的标识符?

How do I use quoted identifier for user + table name combination in Oracle?

在我的 Oracle 数据库设置中,所有 table 都是在专用用户帐户 SYS0MYUSER 下创建的。在我的系统上执行以下查询时,我得到 SQL Error: ORA-00903: invalid table name

SELECT COUNT(*) FROM SYS0MYUSER.USER;

我试过像这样转义保留关键字:

SELECT COUNT(*) FROM "SYS0MYUSER.USER";

但是我又遇到了另一个错误SQL Error: ORA-00942: table or view does not exist

转义用户名 + 保留关键字组合的正确方法是什么?

更新: table alias 我也必须使用双引号吗?

SELECT COUNT(*) FROM "SYS0MYUSER"."USER";

如果您使用 quoted identifier 创建了 table,那么您必须始终使用 双引号 无论你在哪里引用对象。

来自文档,

Database Object Naming Rules

Every database object has a name. In a SQL statement, you represent the name of an object with a quoted identifier or a nonquoted identifier.

  • A quoted identifier begins and ends with double quotation marks ("). If you name a schema object using a quoted identifier, then you must use the double quotation marks whenever you refer to that object.

  • A nonquoted identifier is not surrounded by any punctuation.

例如,

SQL> CREATE TABLE "USER"(A NUMBER);

Table created.

SQL>
SQL> SELECT COUNT(*) FROM LALIT.USER;
SELECT COUNT(*) FROM LALIT.USER
                           *
ERROR at line 1:
ORA-00903: invalid table name


SQL>
SQL> SELECT COUNT(*) FROM LALIT."USER";

  COUNT(*)
----------
         0

SQL>

因此,您需要将 table 引用为 带引号的标识符:

SELECT COUNT(*) FROM SYS0MYUSER."USER";

更新 OP 更新了他关于 table 别名的问题。

What's about table alias do I have to use double quotes too ?

Table别名与引用的标识符无关。

例如,

SQL> SELECT t.* FROM LALIT."USER" t;

no rows selected

SQL>