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

PROGRAMMING/Database51

[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.
[ORACLE] ORA-01830 : 날짜 형식의 지정에 불필요한 데이터가 포함되어 있습니다. 날짜형식을 넣을 때, 기본적으로 String으로 넘기고, 해당 쿼리에서는 To_Date 함수를 써서 넣는 것이 보통. 이때, 외부에서 정말 날짜형식 파라미터로 넘어오면, 이때 넘어오는 파라미터가 MAP 이기 때문에 받아들이는 쿼리는 황당. 차라리 밖에서 넘겨주는 쿼리 자체가 String이 될 수 있도록 처리해서 문제를 방지함. 2022. 9. 7.
[ORACLE] ORA-00936 : 누락된 표현식의 원인 이건 말그대로 SQL 문을 해석할 때, 뭔가 누락되거나 해서 발생하는 현상이다. 그건 , (콤마) 가 난데없이 들어가서 그렇다던가 띄어쓰기가 안돼서 그럴 수도 있겠다. 가령 SQL을 java에서 동적으로 만들어줄때 범하기 쉬운 문제일 듯하다. 한 번 찍어보면 다 안다. 로그로 찍어본 쿼리를 SQL Developer 같은 데이서 한 번만 돌려보면 끝. 2022. 9. 7.
[ORACLE] ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 날짜가 들어가야 할 곳에 '2018-91-23' 와 같이 기형적으로 들어갈 때. 2022. 9. 7.
[ORACLE] ORA-01858: 숫자가 있어야 하는 위치에서 숫자가 아닌 문자가 발견되었습니다. 실수로 "YYYY-MM-DD" 로 들어가야 할 자리에 "--23" 이 들어가 발생함. 즉, 원래는 날짜형이 들어가야 하는데, 문자가 넣어지면서 위와 같은 메시지 보여짐. 2022. 9. 7.
[ORACLE] ORA-01840: 입력된 값의 길이가 날짜 형식에 비해 부족합니다 날짜형으로 Convert 하는 TO_DATE() 함수를 사용시, 'YYYY-MM-DD' 와 같은 형식으로 값을 넣어줘야 함에도 불구하고 숫자형으로 23 과 같이 넣어주면 발생하는 에러이다. 2022. 9. 7.
[ORACLE] ORA-00911: 문자가 부적합합니다 대부분 이런 오류는 XML 에서 ";"문자가 포함되어 발생하는 문제다. 2022. 9. 7.
반응형