Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORA-00904:số nhận dạng không hợp lệ

Vấn đề của bạn là những dấu ngoặc kép độc hại.

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 cho phép chúng ta bỏ qua trường hợp tên đối tượng cơ sở dữ liệu miễn là chúng ta tạo chúng với tên tất cả đều là chữ hoa hoặc không sử dụng dấu ngoặc kép. Nếu chúng ta sử dụng chữ hoa và chữ thường hỗn hợp trong tập lệnh và đặt các mã nhận dạng trong dấu ngoặc kép, chúng ta sẽ bị kết án là sử dụng dấu ngoặc kép và trường hợp chính xác bất cứ khi nào chúng ta tham chiếu đến đối tượng hoặc các thuộc tính của nó:

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

không sử dụng dấu ngoặc kép trong tập lệnh DDL

(Tôi biết hầu hết các trình tạo mã của bên thứ ba đều làm vậy, nhưng họ đủ kỷ luật để đặt tất cả tên đối tượng của mình trong TRƯỜNG HỢP LÊN.)

Điều ngược lại cũng đúng. Nếu chúng ta tạo bảng mà không sử dụng dấu ngoặc kép…

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

… Chúng ta có thể tham chiếu nó và các cột của nó trong mọi trường hợp khiến chúng ta ưa thích:

select * from ps_tbl_department_details

… Hoặc

select * from PS_TBL_DEPARTMENT_DETAILS;

… Hoặc

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng TUPLES để đặt hơn 1000 mục nhập trong mệnh đề SQL IN

  2. Nối giá trị cột thứ hai nếu giá trị cột đầu tiên giống nhau

  3. Cài đặt db Django oracle

  4. Oracle:Truy vấn SQL để tìm tất cả các trình kích hoạt thuộc các bảng?

  5. Pivot trong Oracle 11g