Skip to content

Variable Declaration

ORA-00904 Invalid Identifier - Oracle Database Object Name Recognition Examples

如何解決ORA-00904 無效的 ID

  • by
ORA-00904 ORA-00904表示您在語句中使用了不匹配的欄位名或不正確的語法。通常,錯誤不僅發生在SELECT或INSERT中,還發生在UPDATE,DELETE,CREATE TABLE,ALTER TABLE和PL/SQL塊中。 大多數使用者不會相信錯誤,但事實上SQL解析器從未犯過任何錯誤。在這篇文章中,您可能會看到一些關於ORA-00904的錯誤模式,其中一個可能與您的情況相符。由於大多數使用者錯誤是由區分大小寫的問題引起的,因此我們必須首先解釋鬆散形式和精確形式之間的差異。 通常,Oracle會將大多數識別字排除在密碼之外,並將其視為不區分大小寫的識別字。但是在ORA-00904無效識別字的情況下應該注意一些特殊用法。 不僅ORA-00904,ORA-00903和ORA-00911也與物件識別碼的無效使用有關。更具體地說,ORA-00903警告用戶無效的表名,並引發ORA-00911來定位非法字元 鬆散形式與精確形式 根據Oracle資料庫物件名稱和限定詞,有兩種有效的命名形式來創建資料庫物件。一個是非引用識別字,另一個是帶引號的識別字。為了避免ORA-00904,您必須知道兩種命名形式之間的明顯差異。 非引用識別字(鬆散形式) 它們沒有標點符號或任何其他特殊處理。只要它們基本上是等效的字串,我們就可以在SQL語句中不區分大小地靈活使用它們。所以我通常在這篇文章中將其稱為鬆散形式。實際上,非引用識別字都被認為是上層識別字。這個概念將幫助您更好地瞭解ORA-00904。 帶引號的識別字(精確形式) 它們以雙引號("")開頭和結尾。您可以將幾乎所有字元放在雙引號中,包括空格和保留字。這種識別字應該與最初定義的完全一致。所以我通常在這篇文章中將其稱為精確形式。據我所知,這是ORA-00904的主要來源。 稍後,我們還將討論有關ORA-00904的更多問題,以區分引用的和未引用的識別字。 ORA-00904的錯誤模式 在大多數情況下,濫用欄位名是ORA-00904的主要來源,其餘的是語法錯誤。在這篇文章中,我們將在以下部分討論ORA-00904的幾種錯誤模式。 SELECT或INSERT中的ORA-00904 WHERE,ORDER BY或GROUP BY中的ORA-00904 CREATE TABLE中的ORA-00904 ALTER TABLE中的ORA-00904 PL/SQL中的ORA-00904… Read More »如何解決ORA-00904 無效的 ID
ORA-00904 Invalid Identifier - Oracle Database Object Name Recognition Examples

如何解决ORA-00904 标识符无效

  • by
ORA-00904 ORA-00904表示您在语句中使用了不匹配的列名或不正确的语法。通常,错误不仅发生在SELECT或INSERT中,还发生在UPDATE,DELETE,CREATE TABLE,ALTER TABLE和PL/SQL块中。 大多数用户不会相信错误,但事实上SQL解析器从未犯过任何错误。在这篇文章中,您可能会看到一些关于ORA-00904的错误模式,其中一个可能与您的情况相符。由于大多数用户错误是由区分大小写的问题引起的,因此我们必须首先解释松散形式和精确形式之间的差异。 通常,Oracle会将大多数标识符排除在密码之外,并将其视为不区分大小写的标识符。但是在ORA-00904无效标识符的情况下应该注意一些特殊用法。 不仅ORA-00904,ORA-00903和ORA-00911也与对象标识符的无效使用有关。更具体地说,ORA-00903警告用户无效的表名,并引发ORA-00911来定位非法字符 松散形式与精确形式 根据Oracle数据库对象名称和限定符,有两种有效的命名形式来创建数据库对象。一个是非引用标识符,另一个是带引号的标识符。为了避免ORA-00904,您必须知道两种命名形式之间的明显差异。 非引用标识符(松散形式) 它们没有标点符号或任何其他特殊处理。只要它们基本上是等效的字符串,我们就可以在SQL语句中不区分大小地灵活使用它们。所以我通常在这篇文章中将其称为松散形式。实际上,非引用标识符都被认为是上层标识符。这个概念将帮助您更好地了解ORA-00904。 带引号的标识符(精确形式) 它们以双引号("")开头和结尾。您可以将几乎所有字符放在双引号中,包括空格和保留字。这种标识符应该与最初定义的完全一致。所以我通常在这篇文章中将其称为精确形式。据我所知,这是ORA-00904的主要来源。 稍后,我们还将讨论有关ORA-00904的更多问题,以区分引用的和未引用的标识符。 ORA-00904的错误模式 在大多数情况下,滥用列名是ORA-00904的主要来源,其余的是语法错误。在这篇文章中,我们将在以下部分讨论ORA-00904的几种错误模式。 SELECT或INSERT中的ORA-00904 WHERE,ORDER BY或GROUP BY中的ORA-00904 CREATE TABLE中的ORA-00904 ALTER TABLE中的ORA-00904 PL/SQL中的ORA-00904… Read More »如何解决ORA-00904 标识符无效
ORA-00904 Invalid Identifier - Oracle Database Object Name Recognition Examples

ORA-00904 無効な識別子です。の解決方法

  • by
ORA-00904 ORA-00904は、文の中で一致しない列名または誤った構文を使用したことを意味します。通常、エラーはSELECTまたはINSERTで発生し、その他はUPDATE、DELETE、CREATE TABLE、ALTER TABLE、またはPL/SQLブロックで発生している可能性があります。 ほとんどのユーザーはそのエラーを信じていませんが、実際にSQLパーサーは間違いを犯したことが一度もないので、この記事でエラーパターンを見てみるのが好きかもしれません。おそらく、エラーパターンの1つがあなたのケースにマッチします。ほとんどのエラーは大文字と小文字を区別する問題なので、最初に緩い形式と厳密な形式の違いを説明する必要があります。 通常、Oracleは、パスワード以外の大部分の識別子を大/小文字を区別しないものとして扱います。 ただし、ORA-00904無効な識別子が生成された場合に注意が必要な特別な使用法がいくつかあります。 ORA-00904だけでなく、ORA-00903およびORA-00911も、オブジェクト識別子の無効な使用法に関連しています。 具体的には、ORA-00903は無効なテーブル名をユーザーに警告し、不正な文字を配置するためにORA-00911が発生します。 緩い形式と厳密な形式 Oracle Databaseのオブジェクト名と修飾子によると、データベース・オブジェクトを作成するための有効な命名形式は2種類あります。1つは引用符で囲まれていない識別子、もう1つは引用符で囲まれた識別子です。ORA-00904を回避するには、2つの命名形式の明確な違いを知っておく必要があります。 引用符で囲まれていない識別子(緩い形式) 句読点やその他の特別な扱いに囲まれていません。基本的に同等の文字列である限り、SQLステートメントでは大文字と小文字を区別せずに柔軟に使用できます。だから私は通常この記事でそれを緩い形式と呼びます。 引用符付き識別子(厳密な形式) それらは二重引用符( "")で始まり、終わります。空白や予約語を含め、ほとんどすべての文字を二重引用符で囲むことができます。この種の識別子は、最初に定義されたとおりに使用する必要があります。だから私は通常、この記事ではそれを厳密な形式と呼びます。私の知る限りでは、これがORA-00904の主な原因です。 後ほど、ORA-00904無効な識別子についても詳しく説明します。 ORA-00904のエラー・パターン ほとんどの場合、列名の誤用がORA-00904の主な原因であり、残りは構文エラーです。この記事では、次の項でORA-00904のいくつかのエラー・パターンについて説明します。 SELECT, INSERTのORA-00904 WHERE, ORDER BY,… Read More »ORA-00904 無効な識別子です。の解決方法