Database/Oracle
-
특정 테이블의 UPDATE문을 실행할 때 다른 테이블과 조건을 걸어 값을 바꿔야 하는 경우가 있습니다.MySQL에서는 아래와 같이 UPDATE문에 JOIN을 걸어 사용이 가능합니다.UPDATE STUDENT A INNER JOIN SCHOOL B ON A.SCHOOL_NO = B.SCHOOL_NO SET A.CONTACT_NUMBER = B.SCHOOL_NUMBER WHERE A.SCHOOL_NO = 1 AND A.CONTACT_NUMBER IS NULL;쿼리는 학생의 연락처가 비어 있는 경우, 같은 학교 번호를 가진 SCHOOL 테이블에서 학교 전화번호를 학생의 연락처로 업데이트하는 작업을 수행합니다. Oracle에서는 UPDATE .. JOIN 구문을 제공하지 않기..
[Oracle]UPDATE JOIN 사용하기 2024. 10. 30. -
로컬에서 잘 되던 코드를 스테이징 서버에 올리자 발생한 오류입니다.로그를 확인해보니 아래와 같은 내용을 확인할 수 있었습니다.ORA-01861: literal does not match format string 문제가 된 쿼리는 아래와 같습니다.req_date는 VARCHAR2(8) 타입으로 선언됐습니다. 이 값을 DATE 형태로 변환 후 'YYYY-MM-DD' 형태로 포맷하는 부분이 원인이었습니다.SELECT i1.seq , i1.proc_type , i1.req_content , i1.req_user_name , TO_CHAR(TO_DATE(i1.req_date), 'YYYY-MM-DD') AS req_date FROM MY_TABLE i1WGERE ... TO_DA..
[Oracle]ORA-01861: literal does not match format string 2024. 9. 13. -
오라클 사용시 날짜를 영문으로 표기하는 법은 간단합니다. 아래와 같이 문자열인 경우는 DATE 타입으로 변환을 한번 하고 NLS_DATE_LANGUAGE 옵션을 사용합니다. MonthDD YYYY : 월(月)일(日) 년도 MonthDD, YYYY : 월(月)일(日), 년도(원하는 기호문자 입력 가능, ex. /, -, . 등) Month : 월(月) MonthfmDD, YYYY : 월(月)일(日) 년도(이 때 fmDD를 사용하면 일 표기시 0을 제외됩니다) MonthDD, YYYY, Day : 월(月)일(日), 년도, 요일 SELECT TO_DATE('20210101') , TO_CHAR(TO_DATE('20210101'),'MonthDD YYYY','NLS_DATE_LANGUAGE=ENGLISH') F..
[Oracle]날짜 영문 표기 2021. 1. 14. -
계층형 쿼리는 테이블 내의 데이터 관계가 계층적 관계를 가질 때 사용할 수 있습니다. 계층적 관계란 [메뉴1] - [메뉴1_서브메뉴1] - [메뉴1_서브메뉴1_서브서브메뉴1] 과 같이 서로 관계가 계층적으로 묶여있는 것을 말합니다. 이를 트리 형태라고도 합니다. 위 이미지와 같이 조회/발급, 민원증명, ..., 세무대리인과 같은 대메뉴와 조회/발급 메뉴의 서브 메뉴로 전자세금계산서(서브 메뉴 - 발급,목록조회 등...), 현금영수증, 세금신고납부, 기타 조회 등과 같은 서브메뉴를 계층형 쿼리를 이용해 처리할 수 있습니다. 테이블을 하나 만들어 테스트 데이터를 입력했습니다. 홈텍스 사이트의 조회/발급 메뉴와 민원증명 메뉴를 계층 관계로 나타내보려 합니다. SELECT * FROM TESTTABLE ; 이제..
[Oracle]계층형 쿼리(START WITH ~ CONNECT BY PRIOR) 2019. 11. 21. -
LAG LAG 함수는 데이터의 몇 번째 이전 행의 값을 가져옵니다. 사용법은 다음과 같습니다.(LAG, LEAD 함수가 동일합니다) LAG(Column, N, '') / LEAD(Column, N, '') 첫 번째 인자는 비교할 컬럼 두 번째 인자는 몇 번째 이전(또는 이후) 행의 값을 가져올지. 입력하지 않을 경우, Default = 1 세 번째 인자는 첫 번째(또는 LEAD의 경우 마지막) 행의 값이 Null이 조회될 때 바꿔줄 값 예제를 하나 만들어보겠습니다. 빵 유통기한을 오름차순으로 정렬하고 각각의 빵 유통기한과 해당 빵 이전에 유통기한 날짜를 확인해보겠습니다. WITH TESTDB AS( SELECT 1001 BNUM, '크림빵' BNAME, '20190301' BYMD FROM DUAL UN..
[Oracle]LAG, LEAD 2019. 3. 14. -
오라클에서 공백 제거를 위해 사용할 수 있는 함수는 TRIM()과 REPLACE()가 있습니다. TRIM(), RTRIM(), LTRIM() TRIM : 문자열의 양쪽 공백을 제거 LTRIM : 문자열이 시작되는 부분의 공백 제거 RTRIM : 문자열의 끝 부분의 공백 제거 WITH TESTDB AS( SELECT '20123153' HAKBUN, '김 우근' ENAME FROM DUAL UNION ALL SELECT '20132477' HAKBUN, '박 상후' ENAME FROM DUAL UNION ALL SELECT '20146348' HAKBUN, '배 철수' ENAME FROM DUAL ) SELECT HAKBUN, ENAME FROM TESTDB TESTDB 각 컬럼에는 그림과 같이 공백이 있..
[Oracle]공백 제거 2018. 9. 28. -
CASE WHEN ELSE END 프로그래밍 언어에서 switch case문이 있듯 오라클에서도 case문 사용이 가능합니다. 사용법은 간단합니다. CASE 대상 WHEN 조건1 THEN 결과1 WHEN 조건2 THEN 결과2 WHEN 조건3 THEN 결과3 (ELSE 결과) END 이러한 형태로 대상값이 조건을 만족하는 결과를 출력합니다. 조건에 해당하지 않는 경우는 ELSE로 처리할 수 있습니다. 간단한 사용 예제입니다. WITH TESTDB AS( SELECT '햇빛' STAT, '' CONTENT FROM DUAL UNION ALL SELECT '구름' STAT, '' CONTENT FROM DUAL UNION ALL SELECT '우산' STAT, '' CONTENT FROM DUAL UNION..
[Oracle]CASE문 2018. 9. 2. -
CUBE 지난 글에서 아래와 같은 테이블이 있다고 했을 때, ROLLUP을 사용해서 각 학부별 등록금 총액과 학생 수를 구할 수 있었습니다. [각 학부별 등록금 총액과 학생 수] 그럼 학부(HAKBU)말고 학과(DEP)에 대한 등록금 총액과 학생 수를 구하기 위해서는 어떻게 해야 할까요? 방법은 있다. 학과에 대해 ROLLUP을 사용하여 UNION ALL로 연결시켜주면 됩니다. 하지만 CUBE를 사용하면 더 편하게 결과를 구할 수 있습니다. SELECT HAKBU, DEP, SUM(PAY) PAY, COUNT(SNO) S_COUNT FROM TESTDB GROUP BY CUBE(HAKBU, DEP) ORDER BY HAKBU 빨간 표시된 부분을 보면 학과에 대한 등록금 총액과 학생 수를 확인할 수 있습니..
[Oracle]CUBE 2018. 8. 22.