如何在 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>
在我的 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>