본문 바로가기
  • 읽고보고쓰고

PROGRAMMING97

[ORACLE] 요일별 생산 수량 써머리 표출 위 내용은 요일 마다 다르게 표출되어 보여야 한다. 일요일은 생산하지 않는다. 따라서 시작일과 끝일을 표시할 때, 일요일 표기가 나오지 않게, 심지어 일요일과 월요일의 요일 설정은 동일하게 보이도록 해야한다. 다음과 같이 말이다. WITH T_DD AS ( SELECT CASE TO_CHAR(SYSDATE, 'd') WHEN '1' THEN TRUNC(SYSDATE, 'd')-2 WHEN '2' THEN TRUNC(SYSDATE, 'd')-2 WHEN '3' THEN TRUNC(SYSDATE, 'd')-1 WHEN '4' THEN TRUNC(SYSDATE, 'd')+1 WHEN '5' THEN TRUNC(SYSDATE, 'd')+2 WHEN '6' THEN TRUNC(SYSDATE, 'd')+3 WHEN.. 2022. 12. 20.
[ORACLE] 동일 상품정보 제거하기 미처 UNIQUE INDEX를 잡아놓지 않은 덕분인지, 개발자가 같은 상품을 여러번 등록하는 실수를 했다. 그리고 DB는 그 모든 내용을 저장해 주고 있었다. 집계수량이 어긋나서 확인해 보니 중복 상품 다량 발견. (일단 개발계라 고치면 된다.) 따라서 중복되는 상품을 제거해 줘야 했고, PARTITION BY를 활용하여 다음의 쿼리로 제거 했다. 처음에 등록한 것 빼고는 모두 삭제처리하는 쿼리다. DELETE FROM TB_PRD WHERE PRD_REQ_NO IN ( SELECT PRD_REQ_NO FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY ETPS_CD, PRD_ID ORDER BY ETPS_CD, PRD_ID, MDF_DTM ) RN ,PRD_REQ_NO FR.. 2022. 12. 14.
[ORACLE] 로그인 정책 적용 흔히들 로그인을 만들때, 5회 이상 틀리면 회원을 잠그고, 패스워드 변경 처리하도록 한다. 그에 대한 로직을 적용한 테이블 구조와 쿼리는 다음과 같다. /* n회차 틀릴 경우 저장 */ UPDATE T_USER SET PSWD_FAIL_CNT = 0 WHERE LOGIN_ID = 'TEST1234'; COMMIT; 또한 마지막 패스워드 변경일을 관리하여, 1달에 한 번씩 패드워드를 변경할 수 있게 끔 해줘야 한다. /*마지막 수정일 변경*/ UPDATE T_USER SET LS_PSWD_CHG_DTM = SYSDATE WHERE LOGIN_ID = 'TEST1234'; COMMIT; 끝으로 패스워드를 초기화 해줘야 할 때가 있다. 대부분은 회사 내부 디폴드 값이 있을 것이다. 컬럼의 암호화 방식에 맞춰 .. 2022. 12. 13.
[ORACLE] 내 맘대로 소팅 (커스텀 정렬) SELECT * FROM TB_FRUIT ORDER BY DECODE(FRUIT, 'APPLE', 1, 'GRAPES', 2, 'BANANA', 3, 99) ASC; 이번에 개발하다가 원치않게 위와 같은 소팅이 필요할 때가 있었다. DECODE함수를 통한 변환으로 소팅 기반 숫자를 만든다. 이때 범주에 들지 않는 것은 모두 99 로 변환한다. ORDER BY에 DECODE 함수를 사용하는 것은 속도면에서 좋지는 않을 것 같지만, 일시적으로 사용되는 쿼리에는 무방할 것으로 보인다. ※ 위 쿼리들은 현재 Live 에서 사용하는 것을 변형한 것임을 밝혀둔다. 2022. 12. 12.
[오라클] 주문배송 집계정보 처리 해당 화면을 개발하기 위해 쿼리를 생성했다. 각 건수가 주문테이블에서 상황별로 집계하는 테이블이었다. SELECT ( SELECT COUNT(*) FROM ORD_M A INNER JOIN ORD_D B ON B.ORD_ID = A.ORD_ID WHERE B.ARR_DTM >= TRUNC(SYSDATE) AND A.ORD_TP_CD = '100' AND A.ORD_TP_DTL_CD = '110' AND B.ORD_STS_CD NOT IN ('90', '91') AND B.DLR_ID = '1000145054' ) AS GENERAL_CNT ,( SELECT COUNT(*) FROM ORD_D WHERE ARR_DTM >= TRUNC(SYSDATE) AND ORD_STS_CD = '60' AND DLR_I.. 2022. 12. 7.
[ORACLE] 이번달 1일, 마지막일 구하기 쿼리를 짤 때, 이번달의 1일을 고정으로 넣어야 할 때가 있다. -- 이번달 1일 SELECT TRUNC(SYSDATE, 'MM') FROM DUAL; -- 이번달 마지막일 SELECT LAST_DAY(SYSDATE) FROM DUAL; 물론 위의 SYSDATE 에다가 특정 날짜를 넣으면, 그 해당 날짜에 준하는 첫 날과, 막 날을 뽑아 줄 것이다. 2022. 11. 16.
[JAVA] User session expired or not logged in yet [2019-05-29 15:13:32,611][INFO][com.hy.base.exception.filter.ExceptionTimeoutRedirectFilter][doFilter]:60 - User session expired or not logged in yet 5월 29, 2019 3:13:32 오후 org.apache.catalina.core.StandardWrapperValve invoke 심각: Servlet.service() for servlet dispatcher threw exception java.lang.NullPointerException 보통 이런 에러는 시간이 만료될 때 많이 발생. 우리 DB가 시간 Timeout이 짧다보니 이런 현상이 잘 발생함. 2022. 9. 7.
[ORACLE] ORA-01830 : 날짜 형식의 지정에 불필요한 데이터가 포함되어 있습니다. 날짜형식을 넣을 때, 기본적으로 String으로 넘기고, 해당 쿼리에서는 To_Date 함수를 써서 넣는 것이 보통. 이때, 외부에서 정말 날짜형식 파라미터로 넘어오면, 이때 넘어오는 파라미터가 MAP 이기 때문에 받아들이는 쿼리는 황당. 차라리 밖에서 넘겨주는 쿼리 자체가 String이 될 수 있도록 처리해서 문제를 방지함. 2022. 9. 7.
[ORACLE] ORA-00936 : 누락된 표현식의 원인 이건 말그대로 SQL 문을 해석할 때, 뭔가 누락되거나 해서 발생하는 현상이다. 그건 , (콤마) 가 난데없이 들어가서 그렇다던가 띄어쓰기가 안돼서 그럴 수도 있겠다. 가령 SQL을 java에서 동적으로 만들어줄때 범하기 쉬운 문제일 듯하다. 한 번 찍어보면 다 안다. 로그로 찍어본 쿼리를 SQL Developer 같은 데이서 한 번만 돌려보면 끝. 2022. 9. 7.
[JAVA] 400 Bad Request 인터넷에 찾아보면 해당 에러가 쿠키 값이 커서 어쩌구 저쩌구 하지만, 내 경우는 달랐다. 해당 데이터를 받아야 할 VO 에서 String 을 Integer 로 받는데 따른 에러였으니깐. 그렇다고 이렇게 먹통이 될 줄이야.. 난감한 에러였다. 2022. 9. 7.
[ORACLE] ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 날짜가 들어가야 할 곳에 '2018-91-23' 와 같이 기형적으로 들어갈 때. 2022. 9. 7.
[ORACLE] ORA-01858: 숫자가 있어야 하는 위치에서 숫자가 아닌 문자가 발견되었습니다. 실수로 "YYYY-MM-DD" 로 들어가야 할 자리에 "--23" 이 들어가 발생함. 즉, 원래는 날짜형이 들어가야 하는데, 문자가 넣어지면서 위와 같은 메시지 보여짐. 2022. 9. 7.
반응형