sql >> Base de Datos >  >> RDS >> Oracle

ORA-00904:identificador no válido

Su problema son esas comillas dobles perniciosas.

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 nos permite ignorar las mayúsculas y minúsculas de los nombres de los objetos de la base de datos siempre que los creemos con nombres en mayúsculas o sin usar comillas dobles. Si usamos mayúsculas o minúsculas mixtas en el script y envolvemos los identificadores entre comillas dobles estamos condenados a usar comillas dobles y mayúsculas y minúsculas cada vez que nos referimos al objeto o sus atributos:

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

no use comillas dobles en scripts DDL

(Sé que la mayoría de los generadores de código de terceros lo hacen, pero son lo suficientemente disciplinados como para poner todos los nombres de sus objetos en MAYÚSCULAS).

Lo contrario también es cierto. Si creamos la tabla sin usar comillas dobles…

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

… podemos hacer referencia a él y sus columnas en cualquier caso que nos apetezca:

select * from ps_tbl_department_details

… o

select * from PS_TBL_DEPARTMENT_DETAILS;

… o

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