我正在为我的一个 Oracle Apex 查询获得"Invalid Identifier Error"



我正试图在OracleApex上运行一个脚本,到目前为止,除了最后一个表和查询,所有的表和查询都能工作。它返回错误"0";ORA-00904::无效标识符ORA-06512:在";SQL_APEX_200200";,线路626 ORA-06512:在";SYS.DBMS_SYS_SQL";,第1658行ORA-06512:;SQL_APEX_200200";,行612 ORA-06512:;APEX_ 200200.WWV_FLOW_DYNAMIC_EXEC";,第1749行;我应该怎么做来修复这个错误?

CREATE TABLE customer(
VIN            VARCHAR2(17)
CONSTRAINT vehicles__VIN__fk
REFERENCES vehicles (VIN) ON DELETE SET NULL,
sale_date      DATE
CONSTRAINT sales__sale_date__fk 
REFERENCES sales (sale_date) ON DELETE SET NULL,
c_name         VARCHAR2(50)
CONSTRAINT sales__c_name__nn NOT NULL,
address        VARCHAR2(50)
CONSTRAINT sales__address__nn NOT NULL,
phone          VARCHAR2(11)
CONSTRAINT sales__phone__nn NOT NULL,
gender         VARCHAR2(6)
CONSTRAINT sales__gender__nn NOT NULL,
a_income       VARCHAR2(30)
CONSTRAINT sales__a_income__nn NOT NULL,
);

我不知道这是否有帮助,但VIN和sale_date引用了这两个工作查询:

CREATE TABLE vehicles(
VIN   VARCHAR2(17)
CONSTRAINT vehicles__VIN__pk PRIMARY KEY,
brand VARCHAR2(20)
CONSTRAINT vehicles__brand__nn NOT NULL,
model VARCHAR2(20)
CONSTRAINT vehicles__model__nn NOT NULL,
color VARCHAR2(10)
CONSTRAINT vehicles__color__nn NOT NULL
);
CREATE TABLE sales(
sale_date      DATE, 
price          VARCHAR2(30)
CONSTRAINT sales__price__nn NOT NULL,
VIN            VARCHAR2(17)
CONSTRAINT vehicles__VIN__fk
REFERENCES vehicles (VIN) ON DELETE SET NULL,
d_id           VARCHAR2(10)
CONSTRAINT dealer__d_id__fk 
REFERENCES dealer (d_id) ON DELETE SET NULL,
CONSTRAINT sales__sale_date__pk PRIMARY KEY (sale_date)
);

删除最后一个逗号。

此外,如果您的约束具有命名约定<tablename>__<columnname>__<constrainttype>,那么不要只是从另一个表复制/粘贴并更新列名;您还需要更新表名,否则您会发现有重复的约束名称,这将引发异常。

CREATE TABLE customer(
VIN            VARCHAR2(17)
CONSTRAINT customer__VIN__fk
REFERENCES vehicles (VIN) ON DELETE SET NULL,
sale_date      DATE
CONSTRAINT customer__sale_date__fk 
REFERENCES sales (sale_date) ON DELETE SET NULL,
c_name         VARCHAR2(50)
CONSTRAINT customer__c_name__nn NOT NULL,
address        VARCHAR2(500)
CONSTRAINT customer__address__nn NOT NULL,
phone          VARCHAR2(11)
CONSTRAINT customer__phone__nn NOT NULL,
gender         CHAR(1)
CONSTRAINT customer__gender__nn NOT NULL
CONSTRAINT customer__gender__chk
CHECK ( gender IN ( 'M', 'F' /*, 'A', 'B', 'C'*/ ) ),
a_income       NUMBER(12,2)
CONSTRAINT customer__a_income__nn NOT NULL
);

然后是其他问题:

  • 为什么客户有VIN(车辆识别号(?客户并不局限于拥有一辆汽车
  • 为什么客户有sale_date?如果你指的是汽车销售,那么为什么客户只限于一次销售?您可能想通过将数据移动到一个名为customer_cars(或类似的表(的单独表中来解决这两个问题,这样每个客户都可以拥有多辆车,并且每辆车都可以由多个客户拥有(在不同的时间(
  • 您希望所有客户的地址都能容纳50个字符吗
  • 为什么genderVARCHAR(6),而不是值为M/FCHAR(1)(根据需要扩展其他字符代码(
  • 为什么a_income是字符串而不是NUMBER

最新更新