sql >> Databáze >  >> RDS >> Oracle

ORA-00904:neplatný identifikátor

Tvůj problém jsou ty zhoubné dvojité uvozovky.

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 nám umožňuje ignorovat malá a velká písmena v názvech databázových objektů za předpokladu, že je buď vytvoříme s názvy velkými, nebo bez použití dvojitých uvozovek. Pokud ve skriptu použijeme smíšená velká nebo malá písmena a zabalíme identifikátory do dvojitých uvozovek, jsme odsouzeni používat dvojité uvozovky a přesná velká a malá písmena, kdykoli odkazujeme na objekt nebo jeho atributy:

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

nepoužívejte dvojité uvozovky ve skriptech DDL

(Vím, že většina generátorů kódu třetích stran to dělá, ale jsou dostatečně disciplinovaní na to, aby dávali všechny názvy objektů VELKÝMI PÍSMENY.)

Opak je také pravdou. Pokud vytvoříme tabulku bez použití dvojitých uvozovek …

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

…můžeme na něj a jeho sloupce odkazovat v jakémkoli případě, který se nám líbí:

select * from ps_tbl_department_details

… nebo

select * from PS_TBL_DEPARTMENT_DETAILS;

… nebo

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


  1. Najít odkazující entity na SQL Server:sys.dm_sql_referencing_entities()

  2. Generování vložení sql do pro Oracle

  3. Jak používat proměnnou tabulky v dynamickém příkazu SQL?

  4. Příklad externí tabulky Oracle