sql >> データベース >  >> RDS >> Oracle

ORA-00904:識別子が無効です

    あなたの問題はそれらの有害な二重引用符です。

    SQL> CREATE TABLE "APC"."PS_TBL_DEPARTMENT_DETAILS"
      2  (
      3    "Company Code" VARCHAR2(255),
      4    "Company Name" VARCHAR2(255),
      5    "Sector_Code" VARCHAR2(255),
      6    "Sector_Name" VARCHAR2(255),
      7    "Business_Unit_Code" VARCHAR2(255),
      8    "Business_Unit_Name" VARCHAR2(255),
      9    "Department_Code" VARCHAR2(255),
     10    "Department_Name" VARCHAR2(255),
     11    "HR_ORG_ID" VARCHAR2(255),
     12    "HR_ORG_Name" VARCHAR2(255),
     13    "Cost_Center_Number" VARCHAR2(255),
     14    " " VARCHAR2(255)
     15  )
     16  /
    
    Table created.
    
    SQL>
    

    Oracle SQLでは、すべて大文字の名前で作成するか、二重引用符を使用せずにデータベースオブジェクト名を作成する場合、データベースオブジェクト名の大文字と小文字を無視できます。スクリプトで大文字と小文字の混合または小文字を使用し、識別子を二重引用符で囲んだ場合、オブジェクトまたはその属性を参照するときは常に二重引用符と正確な大文字小文字を使用する必要があります。

    SQL> select count(*) from PS_TBL_DEPARTMENT_DETAILS
      2  where Department_Code = 'BAH'
      3  /
    where Department_Code = 'BAH'
          *
    ERROR at line 2:
    ORA-00904: "DEPARTMENT_CODE": invalid identifier
    
    
    SQL> select count(*) from PS_TBL_DEPARTMENT_DETAILS
      2  where "Department_Code" = 'BAH'
      3  /
    
      COUNT(*)
    ----------
             0
    
    SQL>
    

    tl; dr

    DDLスクリプトで二重引用符を使用しないでください

    (ほとんどのサードパーティのコードジェネレーターはそうしますが、すべてのオブジェクト名を大文字にするのに十分な規律があります。)

    逆もまた真です。二重引用符を使用せずにテーブルを作成すると…

    create table PS_TBL_DEPARTMENT_DETAILS
    ( company_code VARCHAR2(255),
      company_name VARCHAR2(255),
      Cost_Center_Number VARCHAR2(255))
    ;
    

    …どのような場合でも、それとその列を参照できます。

    select * from ps_tbl_department_details
    

    …または

    select * from PS_TBL_DEPARTMENT_DETAILS;
    

    …または

    select * from PS_Tbl_Department_Details
    where COMAPNY_CODE = 'ORCL'
    and cost_center_number = '0980'
    


    1. テーブル値パラメータを変更する方法

    2. sqlまたはphpPgAdminを使用してPostgreSQLデータベースのデータベースエンコーディングを変更するにはどうすればよいですか?

    3. GUIを使用してMySQLWorkbenchでテーブルを作成する方法

    4. エラー1033は、スタンバイへのログオンを受信しました