2014-02-10 3 views
0

나는 테이블했습니다 :오라클 타임 스탬프

Cust_data 
    ( 
    "SEQ_NO" NUMBER, 
    "CUST_ID" VARCHAR2, 
    "SERVER_SID" VARCHAR2, 
    "CUST_NAME" VARCHAR2, 
    "EVENT_TYM" TIMESTAMP, 
    "CUST_DOB" DATE, 
    "ADD_TYMSTMP" TIMESTAMP, 
    "STATUS" VARCHAR2 
    ) 

을 나는 형식의 타임 스탬프를 삽입하기 위해 노력하고있어 :

update CUST_DATA set 
ADD_TYMSTMP = TO_TIMESTAMP('2014-01-25T04:05:26.669Z','yyyy/mm/dd'T'hh24:mi:ss'Z'') 
where CUST_ID='chan012' 
:이 업데이트 문을 사용하려고했습니다

2014-01-25T04:05:26.669Z 

위의 업데이트 문은 오류를 제공합니다.

ORA-00907: missing right parenthesis 

그리고이 문장은 완벽하게 잘 작동합니다.

update CUST_DATA set 
ADD_TYMSTMP = TO_TIMESTAMP('2014-01-25 04:05:26.669','yyyy-mm-dd hh24:mi:ss.ff') 
where CUST_ID='chan012' 

하지만 문제는이 형식을 테이블에 넣어야한다는 것입니다.

2014-01-25T04:05:26.669Z 

위의 타임 스탬프 형식으로이 테이블에로드 할 csv 파일을로드했습니다.로드되지 않습니다. 그래서 하나의 레코드를 삽입하려고 시도해도 작동하지 않습니다. 아무도 도와 드릴 수 있습니까? 미리 감사드립니다.

+1

"*. * "- 올바른 Oracle 오류 메시지도 아니고 수용 가능한 오류 설명도 아닙니다. –

+0

@a_horse_with_no_name : 여기에 오류가 있습니다. ORA-00907 : 오른쪽 괄호가 누락되었습니다. –

답변

1

당신은 고정 된 캐릭터가 아닌 단일 따옴표 주위에 따옴표를 사용해야합니다 :

update CUST_DATA set 
ADD_TYMSTMP = TO_TIMESTAMP('2014-01-25T04:05:26.669Z', 
    'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"') 
where CUST_ID='chan012'; 

shown in the documentation이다; 형식 모델 목록에 표시된 고정 값은 "text"입니다.

귀하의 버전에서 모델 끝에있는 두 개의 작은 따옴표 (예 : ... 'Z'') ...)는 이스케이프 된 따옴표로 처리됩니다. 즉, 따옴표가 고르지 않음을 의미합니다. 문자열이 종료되지 않고 잘못되었습니다. 그랬다면. ORA-00907은 상당히 일반적인 것으로 항상 도움이되는 오류는 아닙니다. 이것은 보통 당신이 상당히 근본적으로 잘못된 것을 가지고 있다는 것을 의미하며 오라클은 그것이 무엇인지 정확하게 파악할 수 없으면 파싱 단계를 끝내야합니다. 때로는 닫는 괄호를 놓친 경우도 있지만, 일반적으로 볼 때 약간 더 깊이보아야합니다.

이 데이터를로드 중이라고하셨습니다. 당신이 그것을 위해 SQL의 * 로더를 사용하는 경우 당신은 specify the model in the control file 할 수 있습니다

load data .... into cust_data ... 
(
    ... 
    add_tymstmp timestamp 'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"', 
    ... 
) 

는 11gR2에서 테스트, 파일에 고정 된 값으로,이 있습니다 : 그것은 실패하기

select add_tymstmp, 
    to_char(add_tymstmp, 'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"') as display 
from cust_data; 

ADD_TYMSTMP     DISPLAY      
---------------------------- ------------------------------ 
25-JAN-14 04.05.26.669000000 2014-01-25T04:05:26.669Z  
+0

나는 이것을 시도했지만 DB에서 작동합니다 char ('T'및 'Z')를 timeStamp와 함께 저장하려고합니다. 당신이 준 솔루션은 좋지만 chars를 제거합니다 : ( –

+1

@Akhilendra - 여분의 문자를 저장할 수 없습니다. 'timestamp' 열은 값을 표시하는 방법과 아무 관계가없는 내부 표현을가집니다. 'to_char()'를 사용하여 같은 형식의 모델을 사용할 때와 같은 방법으로 * 표시 할 수 있습니다. 문자열로 저장하고, 그대로 취급하고, 타임 스탬프로 사용하고 싶지는 마십시오. , 어딘가에 표시 할 때까지 바로.당신의 포맷을 보여주기 위해 예제를 업데이트했습니다. 기본적으로 완전히 다른 디스플레이를 선택했을 때 기본적으로 포맷 모델을 적용하면 원하는 것을 얻을 수 있습니다. –

+0

감사합니다. Alex. 도움이되었습니다. –

관련 문제