Twoim problemem są te zgubne podwójne cytaty.
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 pozwala nam zignorować wielkość liter w nazwach obiektów bazy danych, pod warunkiem, że utworzymy je z nazwami pisanymi wielkimi literami lub bez użycia podwójnych cudzysłowów. Jeśli użyjemy w skrypcie liter mieszanych lub małych liter i umieścimy identyfikatory w podwójnych cudzysłowach, jesteśmy skazani na używanie podwójnych cudzysłowów i dokładnej wielkości liter za każdym razem, gdy odwołujemy się do obiektu lub jego atrybutów:
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
nie używaj podwójnych cudzysłowów w skryptach DDL
(Wiem, że robi to większość zewnętrznych generatorów kodu, ale są one wystarczająco zdyscyplinowane, aby wszystkie nazwy obiektów umieszczać WIELKIMI LITERAMI).
Odwrotna sytuacja również jest prawdziwa. Jeśli utworzymy tabelę bez użycia cudzysłowów…
create table PS_TBL_DEPARTMENT_DETAILS
( company_code VARCHAR2(255),
company_name VARCHAR2(255),
Cost_Center_Number VARCHAR2(255))
;
… możemy odwołać się do niego i jego kolumn w każdym przypadku:
select * from ps_tbl_department_details
… lub
select * from PS_TBL_DEPARTMENT_DETAILS;
… lub
select * from PS_Tbl_Department_Details
where COMAPNY_CODE = 'ORCL'
and cost_center_number = '0980'