Oracle SQL 中部门 ID 的无效标识符

代码似乎没问题,但由于某些无法解释的原因,我无法将值插入表中。我只想插入特定值但由于某种原因显示为无效

表格:

CREATE TABLE employees
(
    EMPLOYEE_ID  NUMber(6) PRIMARY KEY NOT NULL,FIRST_NAME VARCHAR(20),LAST_NAME VARCHAR(25) NOT NULL,EMAIL VARCHAR(25) NOT NULL,PHONE_NUMber VARCHAR(20),HIRE_DATE DATE NOT NULL,JOB_ID VARCHAR2(10) NOT NULL,SALARY NUMber(8,2),COMMISSION_PCT NUMber(2,MANAGER_ID NUMber(6),DEPARTMENT_ID NUMber(4)
);

表已创建并正常工作 当它被添加到哪里出错时:

INSERT INTO employee (EMPLOYEE_ID,LAST_NAME,JOB_ID,DEPARTMENT_ID) 
VALUES(176,'Taylor','SA_REP',80);

希望我能得到答案

chipingguodexiaowang 回答:Oracle SQL 中部门 ID 的无效标识符

在您修复“某事”(如评论所示)之后,现在您尝试插入的日期无效。这就是您正在做的事情(注意 SQL*Plus 如何指向发生错误的确切位置):

SQL> INSERT INTO employees(
  2    employee_id,3    last_name,4    email,5    hire_date,6    job_id,7    department_id
  8  )VALUES(
  9    176,10    'Taylor',11    'jasontaylor@gmail.com',12    31-AUG-1999,13    'SA_REP',14    80
 15  );
  31-AUG-1999,*
ERROR at line 12:
ORA-00984: column not allowed here

看到了吗?您不能按字面意思插入 31-AUG-1999。它看起来是我们人类的约会对象,但 - 事实并非如此。如果您尝试将其括在单引号中,则会出现另一个 - 不同 - 错误:

SQL> INSERT INTO employees(
  2    employee_id,12    '31-AUG-1999',14    80
 15  );
  '31-AUG-1999',*
ERROR at line 12:
ORA-01858: a non-numeric character was found where a numeric was expected


SQL>

这有什么问题?是我的 NLS 设置无法识别这种格式。 Oracle 尝试将字符串(这就是 '31-AUG-1999')隐式转换为有效的 DATE 数据类型值,但失败了。

那么,怎么办?控制它!指定有效的 DATE 值,例如使用始终类似于 DATE 'YYYY-MM-DD':

的日期文字
SQL> INSERT INTO employees(
  2    employee_id,12    DATE '1999-08-31',14    80
 15  );

1 row created.

SQL>

或者,使用 TO_DATE 函数:

SQL> INSERT INTO employees(
  2    employee_id,7    department_id
  8  )VALUES(
  9    177,12    to_date('31.08.1999','dd.mm.yyyy'),14    80
 15  );

1 row created.

SQL>

或者,根据需要更改会话并设置 NLS 设置,但这不是一个好主意。您更愿意按照之前演示的方式进行操作:

SQL> alter session set nls_date_format = 'mon-yyyy-dd';

Session altered.

SQL> alter session set nls_date_language = 'croatian';

Session altered.

SQL> INSERT INTO employees(
  2    employee_id,7    department_id
  8  )VALUES(
  9    178,12    'kol-1999-31',14    80
 15  );

1 row created.

SQL>
,

用逗号将日期值括起来:

INSERT INTO employees (EMPLOYEE_ID,LAST_NAME,EMAIL,HIRE_DATE,JOB_ID,DEPARTMENT_ID)  
VALUES(176,'Taylor','jasontaylor@gmail.com','31-AUG-1999','SA_REP',80);

见小提琴: http://sqlfiddle.com/#!4/feb15f/1/0

本文链接:https://www.f2er.com/8064.html

大家都在问