【问题标题】:TOAD invalid identifier error ORA-00904TOAD 无效标识符错误 ORA-00904
【发布时间】:2017-10-29 18:03:17
【问题描述】:

我需要有关错误代码 ORA-00904 的帮助。我通过这段代码创建了表格

CREATE TABLE OYKUN_EMPLOYEE(
EMPNO INTEGER,
EMP_NAME OYKUN_NAME_TYPE,
EMP_ADDRESS OYKUN_ADDRESS_TYPE,
EMP_BIRTH_DATE DATE,
EMP_DEPARTMENT OYKUN_DEPARTMENT_TYPE,
EMP_MANAGER OYKUN_MANAGER_TYPE,
EMP_SALARY OYKUN_SALARY_TYPE
)
NESTED TABLE EMP_NAME STORE AS OYKUN_EMPNAME
NESTED TABLE EMP_ADDRESS STORE AS OYKUN_EMPADDRESS
NESTED TABLE EMP_DEPARTMENT STORE AS OYKUN_EMPDEPARTMENT
NESTED TABLE EMP_MANAGER STORE AS OYKUN_EMPMANAGER
NESTED TABLE EMP_SALARY STORE AS OYKUN_EMPSALARY;

创建表格后,我想用下面的代码插入一些数据

INSERT INTO OYKUN_EMPLOYEE (EMPNO,EMP_NAME,EMP_ADDRESS,EMP_BIRTH_DATE,EMP_DEPARTMENT,EMP_MANAGER,EMP_SALARY) VALUES 
(100,
EMP_NAME (OYKUN_TEMPORAL_VARCHAR('1/1/2007','12/31/2017','Ted Mosby')),
EMP_ADDRESS (OYKUN_TEMPORAL_VARCHAR('1/1/2007','12/31/2017','Manhattan,New York')),
'5/20/1982',
EMP_DEPARTMENT (OYKUN_TEMPORAL_VARCHAR('1/1/2007','12/31/2017','Architect')),
EMP_MANAGER (OYKUN_TEMPORAL_VARCHAR('1/1/2007','12/31/2017','Walter White')),
EMP_SALARY (OYKUN_TEMPORAL_NUMBER('TO_DATE(1/1/2007)','TO_DATE(12/31/2017)',2500))
);

我尝试了所有可能的方法,但仍然得到“EMP_SALARY”:无效标识符。

谁能帮我解决这个问题?表和列创建成功。

我还为表格创建了类型。

这里,

CREATE TYPE OYKUN_TEMPORAL_VARCHAR AS OBJECT (
VT_LB DATE,
VT_UB DATE,
VALUE VARCHAR2(50)
);

CREATE TYPE OYKUN_TEMPORAL_NUMBER AS OBJECT (
VT_LB DATE,
VT_UB DATE,
VALUE_PART INTEGER
);

CREATE TYPE OYKUN_NAME_TYPE AS TABLE OF OYKUN_TEMPORAL_VARCHAR;
CREATE TYPE OYKUN_ADDRESS_TYPE AS TABLE OF OYKUN_TEMPORAL_VARCHAR;
CREATE TYPE OYKUN_MANAGER_TYPE AS TABLE OF OYKUN_TEMPORAL_VARCHAR;
CREATE TYPE OYKUN_DEPARTMENT_TYPE AS TABLE OF OYKUN_TEMPORAL_VARCHAR;
CREATE TYPE OYKUN_SALARY_TYPE AS TABLE OF OYKUN_TEMPORAL_NUMBER;

【问题讨论】:

  • 大概所有这些像'1/1/2007'这样的字符串应该是像date '2007-01-01'这样的日期。我不确定最后一行 'TO_DATE(1/1/2007)' 的意图是什么。

标签: sql oracle plsql ddl


【解决方案1】:

您应该指出您尝试插入的数据类型,例如,而不是:

`EMP_NAME (OYKUN_TEMPORAL_VARCHAR('1/1/2007','12/31/2017','Ted Mosby')),

你应该有:

OYKUN_NAME_TYPE(OYKUN_TEMPORAL_VARCHAR('1/1/2007','31/12/2017','Ted Mosby')),

所以整个插入会是这样的:

INSERT INTO OYKUN_EMPLOYEE (EMPNO,EMP_NAME,EMP_ADDRESS,EMP_BIRTH_DATE,EMP_DEPARTMENT,EMP_MANAGER,EMP_SALARY) VALUES 
(100,
OYKUN_NAME_TYPE(OYKUN_TEMPORAL_VARCHAR('1/1/2007','31/12/2017','Ted Mosby')),
OYKUN_ADDRESS_TYPE (OYKUN_TEMPORAL_VARCHAR('1/1/2007','31/12/2017','Manhattan,New York')),
'20/5/1982',
OYKUN_DEPARTMENT_TYPE (OYKUN_TEMPORAL_VARCHAR('1/1/2007','31/12/2017','Architect')),
OYKUN_MANAGER_TYPE (OYKUN_TEMPORAL_VARCHAR('1/1/2007','31/12/2017','Walter White')),
OYKUN_SALARY_TYPE (OYKUN_TEMPORAL_NUMBER('1/1/2007','31/12/2017',2500))
);

PS。与您的相比,我更改了日期格式,因为我有不同的 NLS 设置

【讨论】:

  • 如果出现如下情况,我将如何编写选择查询。我做不到。
  • 我写了 SELECT EMPNAME.VALUE FROM OYKUN_EMPLOYEE 但它给出了错误
  • @OykunYenal 试试这个符号:SELECT t2.value FROM OYKUN_EMPLOYEE t1, table(t1.EMP_NAME) t2SELECT (select value from table(t1.EMP_NAME)) FROM OYKUN_EMPLOYEE t1
  • 你能给我一个关于我尝试更新但它不满足我的要求的更新和删除查询的例子。
  • 我需要更新 EMPMANAGER 但旧值必须保留我必须添加新元组并更改其有效时间
猜你喜欢
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多