2015-02-04 3 views
-3

다른 컬럼이 특정 기준을 충족하는 경우 테이블의 필수 데이터를 변경하는 쿼리를 작성하려고합니다. Last_logon 날짜가 (SYSDATE - 45 일) 전에 "STATUS"테이블의 열을 '활성'에서 '비활성'으로 변경하려면 "Last_logon"열과 SYSDATE를 비교해야합니다. .Oracle 11g 쿼리

다음은 지금까지 작성한 내용 중 하나이지만 "Last_logon"열은 varchar2 데이터 형식이고 Month, DD YYYY HH : MM 형식입니다. 어떤 제안이라도 varchar2를 날짜 데이터 형식으로 "변환"하려고했지만 많은 오류 메시지가 발생했을뿐입니다.

ALTER TABLE technician_tbl 
ALTER COLUMN 'STATUS' 
WHERE 'Last_logon' > (SYSDATE -45); 
+0

당신이로 변환을 시도하고 errormessages이 – Marco

+0

같은 모습 즉, 쿼리 오라클의 의미가 무엇인지 우리에게 보여줍니다. –

+0

힌트 : ALTER TABLE 문은 테이블의 스키마를 수정합니다. 즉, 열을 추가하고 열을 삭제하며 열의 이름을 바꿉니다. 원하는 것은 아닙니다. 테이블의 데이터를 변경하려고합니다. 이것이 UPDATE (또는 MERGE) 문을위한 것입니다. – Codo

답변

0

ALTER 표에 technician_tbl 대한 ALTER COLUMN '상태' WHERE 'Last_logon'> (SYSDATE -45);

오라클에서 유효한 쿼리 구문이라고 생각하지 않습니다.

"Last_logon"열은 varchar2 데이터 형식이고 Month, DD YYYY HH : MM 형식입니다.

당신은 STRING과 실제 DATE 사이에서 어려움을 겪고있다. 그러나 귀하의 질문과 관련하여 중요한 문제는 아닙니다.

Last_logon 날짜가 (SYSDATE - 45 일) 이전 인 경우 "STATUS"테이블의 열을 '비활성'에서 '비활성'으로 변경하고 싶습니다.

작업을 기반으로 데이터를 조작하려면 트리거 또는 다른 대안이 필요합니다.

0

대해 무엇을 :

UPDATE technician_tbl 
    SET status = 'Inactive' 
    WHERE TO_DATE(last_logon, 'MONTH, DD YYYY HH:MM) < SYSDATE - 45; 

COMMIT; 

나는 열 Last_logon이 LAST_LOGON라는 사실에 있다고 가정합니다. 대소 문자가 혼용 된 맞춤법을 사용하는 경우 큰 따옴표로 이름을 지정해야합니다 ("Last_Logon").

0

방금 ​​Oracle 9 데이터베이스에 대해 시도한 경우.

Update Technician_tbl 
Set Status = 'Inactive' 
Where TO_DATE(Last_Logon, "MM.DD.YYYY HH:MM") > (SYSDATE -45) 

Last_Logon 것은 정말 형식 MM.DD.YYYY HH:MM을 가지고 가정 : 당신이 찾고있는 무슨이 비슷한입니다. 마지막 로그온에 다른 형식이있는 경우 To_Date() 기능을 적절히 변경해야합니다. Last_Logon의 형식 MONTH, DD YYYY HH:MM에 있다면 당신은 SQL의 세계에 새로운 때문에 함수가 TO_DATE(Last_Logon, 'MONTH, DD YYYY HH:MM')

을 것

: 당신은 SQL을 사용하는 플러스 당신은 당신의 쿼리 결국에 COMMIT를 추가해야 할 수 있습니다 데이터베이스에 변경 사항을 기록하십시오.

추가 정보 : http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions183.htm