3

在我的 Oracle DB 设置中,所有表都是在专用用户帐户下创建的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

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

更新:关于表别名我也必须使用双引号吗?

4

2 回答 2

3

如果您使用带引号的标识符创建了表,那么无论您在何处引用该对象,都必须始终使用双引号。

从文档中,

数据库对象命名规则

每个数据库对象都有一个名称。在 SQL 语句中,您使用带引号的标识符或不带引号的标识符来表示对象的名称。

  • 带引号的标识符以双引号 (") 开头和结尾。如果您使用带引号的标识符命名架构对象,则在引用该对象时必须使用双引号。

  • 不带引号的标识符不被任何标点符号包围。

例如,

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>

因此,您需要将该表称为带引号的标识符

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

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

表别名是怎么回事,我也必须使用双引号吗?

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

例如,

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

no rows selected

SQL>
于 2015-05-28T08:26:50.267 回答
1
SELECT COUNT(*) FROM "SYS0MYUSER"."USER";
于 2015-05-28T08:15:51.040 回答