我的 Oracle Apex 查询之一得到 "Invalid Identifier Error"
I'm getting "Invalid Identifier Error" for one of my Oracle Apex Queries
我正在尝试 运行 Oracle Apex 上的脚本,到目前为止,除最后一个外,所有表和查询都有效。它 returns 错误“ORA-00904::无效标识符 ORA-06512:在“SYS.WWV_DBMS_SQL_APEX_200200”,第 626 行 ORA-06512:在“SYS.DBMS_SYS_SQL”,第 1658 行 ORA- 06512:在“SYS.WWV_DBMS_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>
,那么不要只是从另一个 table 中 copy/paste 并更新列名称;您还需要更新 table 名称,否则您会发现您有重复的约束名称,这会引发异常。
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
(或类似的东西)的单独 table 来解决这两个问题,以便每个客户可以拥有多辆汽车,并且每辆汽车可以由多个客户拥有(在不同的时间)。
- 您希望所有客户的地址都在 50 个字符以内吗?
- 为什么
gender
是 VARCHAR(6)
而不是值 M
/F
的 CHAR(1)
(根据需要使用其他字符代码扩展)?
- 为什么
a_income
是字符串而不是 NUMBER
?
我正在尝试 运行 Oracle Apex 上的脚本,到目前为止,除最后一个外,所有表和查询都有效。它 returns 错误“ORA-00904::无效标识符 ORA-06512:在“SYS.WWV_DBMS_SQL_APEX_200200”,第 626 行 ORA-06512:在“SYS.DBMS_SYS_SQL”,第 1658 行 ORA- 06512:在“SYS.WWV_DBMS_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>
,那么不要只是从另一个 table 中 copy/paste 并更新列名称;您还需要更新 table 名称,否则您会发现您有重复的约束名称,这会引发异常。
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
(或类似的东西)的单独 table 来解决这两个问题,以便每个客户可以拥有多辆汽车,并且每辆汽车可以由多个客户拥有(在不同的时间)。 - 您希望所有客户的地址都在 50 个字符以内吗?
- 为什么
gender
是VARCHAR(6)
而不是值M
/F
的CHAR(1)
(根据需要使用其他字符代码扩展)? - 为什么
a_income
是字符串而不是NUMBER
?