2013-06-20 2 views
-1
create table Department 
(Dname varchar(255) NOT NULL, Dnumber int NOT NULL PRIMARY KEY, Mgr_SSN char(9) NOT NULL, Mgr_start_Date DATE); 

insert into Department values('HR', '1', '11001', '2012-04-05 10:15:00'); 

오류가 발생합니다. "not valid month".
테이블을 만들 때 날짜 형식을 정의해야합니까?
Oracle11g을 사용하고 있습니다."유효하지 않은 달"오류가 발생합니다

+0

가능한 복제본 [여기] (http://stackoverflow.com/questions/17206160/oracle-how-to-use-time-and-date) – Noel

답변

1

DATE 열이있는 경우 VARCHAR2이 아닌 DATE을 항상 삽입해야합니다. 암시 적 변환을 사용하여 문자열을 올바르게 변환하는 것은 나쁜 생각입니다. 다른 세션에서 다른 NLS 설정을 사용하고 암시 적 변환을 다르게 수행하는 것은 매우 쉽습니다 (다른 DATE 또는 오류가 발생 함). 가장 쉬운 방법은 to_date 기능을 사용하는 것입니다. 그것은 할 수 있으므로

insert into Department(dname, 
         dnumber, 
         mgr_ssn, 
         mgr_start_date) 
    values('HR', 
     1, 
     '11001', 
     to_date('2012-04-05 10:15:00', 'yyyy-mm-dd hh24:mi:ss')); 

은 또한 당신이 테이블에있는 모든 시간을 열 실제 순서를 볼 필요가 없습니다 보장하기 때문에 일반적으로 좋은 방법입니다 열을 나열 할 문을 수정 INSERT 명령문을 사용하여 테이블에 새 열을 추가하면 나중에 작동합니다. dnumberNUMBER이기 때문에 문자열을 삽입하는 대신 숫자를 삽입하도록 INSERT 문을 변경했습니다. (필요하지 않으면 암시 적 변환에 의존하지 마십시오.) 나는 당신이 5 문자 문자열을 삽입하고있는 사회 보장 번호를 나타내는 CHAR(9) 열을 가지고 있다는 명백한 버그를 시정하지 않았습니다.

관련 문제