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'