Database
-
특정 테이블의 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. -
오래전 토이프로젝트로 시작한 소스를 리팩토링하면서 암호화 기능을 추가해봤습니다. 소스는 여기에서 확인하실 수 있습니다. 무료로 사용이 가능한 MariaDB에서는 단/양방향의 암호화 기능을 제공합니다. 본문에서 사용된 암호화는 단방향으로 사용자 패스워드를 암호화할 때 사용되었습니다. 단방향 암호화 일반적으로 암호화는 평문을 암호문으로 바꿔주는 것을 말합니다. 단방향 암호화는 평문을 암호문으로 바꾸는 것만 가능한 암호화 기법입니다. 단방향 암호화는 해시 함수를 이용합니다. 해시 함수는 임의의 평문 데이터를 고정된 길이의 데이터로 반환해줍니다. 또 동일한 값이 입력되면 동일한 출력값을 보장합니다. (이 부분에 대한 위험성은 이 블로그에서 확인할 수 있었습니다) 해시 함수에는 대표적으로 MD5와 SHA가 있는데..
[MySQL,MariaDB]암호화, 복호화 2021. 7. 30. -
오라클 사용시 날짜를 영문으로 표기하는 법은 간단합니다. 아래와 같이 문자열인 경우는 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. -
관계형 테이블은 행과 열로 이루어져 있습니다. 이번 글은 테이블의 행과 열의 위치를 바꾸는 피벗에 대한 포스팅입니다. 예제는 MariaDB(MySQL 가능)로 실습하였습니다. 오라클 11g부터는 피벗 기능을 자체적으로 제공하는데 거기에 대해서는 이후에 따로 포스팅할 예정입니다. 여기 피벗을 이용하려는 테이블 두 개가 있습니다. PM_CALENDAR 테이블에는 2021년도까지의 날짜 데이터가 입력되어 있습니다. DATE : DATE 타입의 날짜 데이터 DATECHAR : VARCHAR 타입의 날짜 데이터 PM_COMMUTE 테이블은 사람들의 출, 퇴근 기록이 담겨있습니다. 여기서 사용할 필드는 USERCD, WORKDAY, TODATE, FROMDATE 입니다. USERCD : 사람들의 고유번호 WORKD..
[MySQL,MariaDB]피벗(Pivot) 사용하기 2020. 5. 11. -
Oracle을 오래 써왔던 탓에 MariaDB로 뭘 하려고 하다보니까 문법의 차이나... 함수나... 적응이 쉽지는 않네요 ㅠㅠ 오늘은 MariaDB(+MySQL)에서 Outer join시 조건을 주는 법에 대한 포스팅을 준비했습니다. MariaDB 역시 Outer Join에 대한 개념은 Oracle과 다르지 않습니다. 다만 개인적으로 자주 사용하던 (+) 연산자가 되지 않아서 불편하긴 하네요.. 문제가 되는 쿼리 로그입니다. (참고로 PM_CALENDAR 라는 테이블에는 날짜 데이터들이 들어있고, PM_COMMUTE 라는 테이블에는 유저마다 날짜에 해당하는 출,퇴근 시간이 찍힌 데이터가 들어있습니다) 원하는 결과는 B테이블(PM_COMMUTE)에 대한 Null 처리였는데 어째서인지 Inner Join과..
[MySQL,MariaDB]Outer Join 조건 주기 2020. 4. 30. -
SQL 오류 (1093): Table 'PM_COMMUTE' is specified twice, both as a target for 'UPDATE' and as a separate source for data MariaDB(또는 MySQL)를 사용하다가 1093 에러와 마주친다면 서브쿼리 사용이 문제일 것입니다. 아래는 에러가 발생한 쿼리 로그입니다. UPDATE PM_COMMUTE SET FROMDATE = '2020.04.29 13:42:43' WHERE WORKDAY = ( SELECT MAX(WORKDAY) WORKDAY FROM PM_COMMUTE WHERE USERCD = 'admin' AND FIXYN = 'N' ) MariaDB는 Oracle과 달리 UPDATE 또는 DELETE 시에 서..
[MySQL,MariaDB]SQL 오류 (1093) 2020. 4. 29. -
계층형 쿼리는 테이블 내의 데이터 관계가 계층적 관계를 가질 때 사용할 수 있습니다. 계층적 관계란 [메뉴1] - [메뉴1_서브메뉴1] - [메뉴1_서브메뉴1_서브서브메뉴1] 과 같이 서로 관계가 계층적으로 묶여있는 것을 말합니다. 이를 트리 형태라고도 합니다. 위 이미지와 같이 조회/발급, 민원증명, ..., 세무대리인과 같은 대메뉴와 조회/발급 메뉴의 서브 메뉴로 전자세금계산서(서브 메뉴 - 발급,목록조회 등...), 현금영수증, 세금신고납부, 기타 조회 등과 같은 서브메뉴를 계층형 쿼리를 이용해 처리할 수 있습니다. 테이블을 하나 만들어 테스트 데이터를 입력했습니다. 홈텍스 사이트의 조회/발급 메뉴와 민원증명 메뉴를 계층 관계로 나타내보려 합니다. SELECT * FROM TESTTABLE ; 이제..
[Oracle]계층형 쿼리(START WITH ~ CONNECT BY PRIOR) 2019. 11. 21.