2017-11-15 30 views
0

Oracle SQL Developer에는 DATE 형식의 열이있는 테이블이 있습니다. 이 테이블에 새 행을 삽입하고이 열에 새 값을 삽입하면 현재 시간이 현재 날짜로 자동 제안됩니다. 나는 자동으로 현재 날짜를 제안하지만, 00:00:00시으로 표시하고 싶습니다.이 결과를 얻으려면 SQL Developer에서 설정할 수있는 설정이나 매개 변수가 있습니까?Oracle SQL Developer - 새 DATE 값을 삽입 할 때 00:00:00 시간을 강제하는 방법

답변

0

당신의 DATE 열은 DEFAULT of SYSDATE로 설정되어 있습니다. 즉, DATE 열에 값을 지정하지 않은 INSERT 조작의 경우 현재 날짜와 시간이 해당 행에 채워집니다. 그러나 INSERT 조작이 DATE 열에 값을 지정하면 지정된 날짜 값이 SYSDATE의 DEFAULT보다 우선합니다.

응용 프로그램에서 해당 테이블에 대한 INSERT 작업을 제어하는 ​​경우 한 가지 해결 방법은 응용 프로그램에서 TRUNC() 함수를 사용하여 원하는 결과를 얻는 것입니다. 거기에 여러 응용 프로그램 또는 인터페이스를 사용자가 테이블에 새로운 행을 삽입 할 수있다 (예를 들어, Microsoft Access를 사용하거나 SQL 개발자를 통해 INSERT 문을 실행하는 사용자)이 있는지 여부

INSERT INTO tbl_target 
    (
    col_date, 
    col_value 
    ) 
VALUES 
    (
    TRUNC(SYSDATE, 'DDD'), 
    5000 
    ) 
; 

그러나 강제 할 수 없습니다 예를 들어, 이러한 모든 인터페이스는 삽입하는 동안 해당 열에서 TRUNC() 함수를 사용하기 때문에 다른 옵션을 조사해야합니다.

INSERT 조작이 실제로 DATE를 참조하지 않는다는 것을 보장 할 수 있으면 DATE 열에 TRUNC (SYSDATE)의 DEFAULT가 있도록 테이블을 간단히 변경할 수 있습니다. 점검 제한 조건은 더 무결성을 추가 할 수 있습니다

ALTER TABLE tbl_target 
    MODIFY 
      (
      col_date DATE DEFAULT TRUNC(SYSDATE, 'DDD') NOT NULL 
     ) 
    ADD 
      (
      CONSTRAINT tbl_target_CHK_dt CHECK(col_date = TRUNC(col_date, 'DDD')) 
     ) 
; 

그러나, 여전히 사용자 가 새 행을 삽입 할 때 날짜를 지정할 수있는 자유가 있다면, 당신은 트리거를 사용하는 것이 좋습니다 :

CREATE OR REPLACE TRIGGER tbl_target_biu_row 
BEFORE INSERT OR UPDATE OF col_val 
    ON tbl_target 
FOR EACH ROW 

BEGIN 

    :NEW.col_date := TRUNC(SYSDATE, 'DDD'); 

END tbl_target_biu_row 
; 

테이블에 대한 모든 외부 INSERT 작업의 응용 프로그램 코드를 관리해야 할 필요가 있습니다. 위의 트리거는 사용자가 지정된 값 열을 업데이트하는 경우 DATE 열을 수정합니다.

+0

로 변경됩니다, 그리고 항상 나에게 0시 0분 0초 시간을 제안합니다? –

+0

이에 대한 답변을 알려 드리겠습니다. – dreamwork

0

우리는 할 수 ... 0시 0분 0초 시간 ... 시간 값 사이 1-12해야 삽입 할 수 없습니다

우리 00:00:00 시간을 삽입하는 쿼리 아래에 사용할 수

하지만, 값은 내가 한 번 모두를 위해이 쿼리를 실행해야합니다 12시 0분 0초

INSERT INTO TABLE (DATE_COL) VALUES (TO_DATE ('11/16/2017 00:00:00 ', 'MM/DD/YYYY HH24:MI:SS '));