sql >> Databasteknik >  >> RDS >> Oracle

ORA-00904:ogiltig identifierare

Ditt problem är de där fördärvliga citattecken.

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 tillåter oss att ignorera fallet med databasobjektnamn förutsatt att vi antingen skapar dem med alla namn i versaler eller utan att använda dubbla citattecken. Om vi ​​använder blandade bokstäver eller gemener i skriptet och lindade identifierarna i dubbla citattecken är vi dömda att använda dubbla citattecken och exakta skiftlägen när vi hänvisar till objektet eller dess attribut:

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

använd inte dubbla citattecken i DDL-skript

(Jag vet att de flesta tredjepartskodgeneratorer gör det, men de är tillräckligt disciplinerade för att sätta alla sina objektnamn med VERSALER.)

Det omvända är också sant. Om vi ​​skapar tabellen utan att använda dubbla citattecken …

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

… vi kan referera till den och dess kolumner i vilket fall som helst:

select * from ps_tbl_department_details

… eller

select * from PS_TBL_DEPARTMENT_DETAILS;

… eller

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


  1. Hur man skapar en tabell med en främmande nyckel i SQL

  2. Stöder din ODBC-drivrutin användardatakällor?

  3. GROUP BY-beteende när inga aggregerade funktioner finns i SELECT-satsen

  4. Kan inte använda en MySQL-anslutning för entity framework 6