WORK/DB 44

Oracle 과 MSSQL 문법차이

Oracle 과 MS SQL 은 둘 다 관계형 데이터베이스 시스템이지만, 각각의 제품은 특정한 문법과 기능을 가지고 있다. 아래는 오라클과 MS SQL 간의 주요 문법 차이에 대한 간략한 설명이다. 1. Data Type 의 차이 MS SQL Data Type Oracle Data Type VARCHAR VARCHAR2 / VARCHAR INT NUMBER DATETIME DATE 2. 시퀀스 생성(자동 증가값) 의 차이 MS SQL 의 경우 테이블 생성 시 IDENTITY로 선언 / Oracle의 경우 테이블과 유사하게 SEQUENCE 를 생성해야 한다. MS SQL 시퀀스 생성 ( 자동 증가값) Oracle 시퀀스 생성 ( 자동 증가값) CREATE TABLE table_name ( id INT ID..

WORK/DB 2023.12.20

mysql function 생성 시 You have en error in your SQL syntax 오류 해결

개발에서 생성한 function을 운영에 생성 하려고 하는데 아래와 같이 오류가 발생했다. You have en error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3 짜증 ;;; 이것저것 보다보니 DELIMITER 를 추가해 주면 된다고 한다. DELIMITER $$ CREATE FUNCTION FN_TEST(P_NAME VARCHAR(10)) RETURNS VARCHAR(10) BEGIN DECLARE RTN VARCHAR(10); SELECT DEPT_NAME INTO RTN FROM DEPT_INFO; RETURN..

WORK/DB 2023.10.31

mysql TRUNCATE를 이용하여 원단위 없애기

TRUNCATE 의 경우 아래와 같이 테이블의 데이터를 삭제하는데에도 사용한다. TRUNCATE TABLE 테이블명 개발을 하다보면 금액 부분에서 원단위를 없애달라는 기획서를 보는 경우가 있는데 2563원 일 경우 원단위를 없애고 2560원으로 표기해야 할 경우 TRUNCATE 를 사용해도 된다. SELECT TRUNCATE(2563.311, -1) FROM DUAL -- 결과 : 2560 SELECT TRUNCATE(2563.311, 0) FROM DUAL -- 결과 : 2563 위와같이 0으로 인자값을 주면 소수점이 절삭되어 조회되는게 확인된다.

WORK/DB 2023.10.31

DBeaver 사용 Tip

쿼리를 작성하다 보면 IN 조건을 사용할 때가 많다. 값이 한두개면 상관 없지만 수십개 수백개의 IN 조건을 select 결과로 넣지 못할 경우 자동으로 치환해 주는 꿀팁을 소개하고자 한다. SELECT * FROM EMP_INFO WHERE EMP_NO IN ( 'NO1234' ,'NO1235' ,'NO1236' ,'NO1237' ,'NO1238' ,'NO1239' ,'NO1240' ,'NO1241' ,'NO1242' ,'NO1243' ,'NO1244' ,'NO1245' ,'NO1246' ,'NO1247' ,'NO1248' ,'NO1249' ,'NO1250' ,'NO1251' ) 예를들어 위와 같은 IN 조건을 왕창 넣어야 할 때 DBeaver 에서 일괄 치환 하는 방법이 있다. 1. DBeaver 에..

WORK/DB 2023.10.12

MY SQL 특정문자 개수 구하기

mysql에서 특정 문자의 개수를 구할 일도 있다. 예를들어 아래와 같은 쿼리문을 조회해서 결과값을 조회했다고 가정해보자. SELECT DEPT_NAME FROM DEPT_INFO DEPT_NAME 개발팀@@@인사팀 조회 결과를 보면 DEPT_NAME 값에는 개발팀@@@인사팀 의 값이 있는데 여기서 특수문자 @의 개수를 구해보자. SELECT LENGTH(DEPT_NAME) - CHAR_LENGTH(REPLACE(DEPT_NAME, '@@@', '')) FROM DEPT_INFO 위와같은 쿼리로 조회 시 결과는 3이 출력 될 것이다. 해당 쿼리는 PostGre DB에서도 조회가 가능하다.

WORK/DB 2023.10.05

mysql 프로세스 확인 및 kill 하기

테이블을 삭제하고 다시 만들어야 할 일이 생겨서 drop 을 하려고 하니 로딩만 되고 drop이 되지 않았다. 혹시몰라 process 확인 show processlist; 왜 sleep이 이렇게 많지? ;; sleep 상태에서 시간이 올라가는건 db 를 사용하는 어플리케이션에서 mysql 접속을 한 뒤에 접속세션을 종료하지 않고 그냥 놔두면 발생한다고 한다. 개발자가 나만 있는게 아니니 일단 가장 긴 Time을 가지고 있는 값들만 모두 kill 처리 했다. kill 명령어 // kill [id입력] kill 105621; 그리고 나서 테이블 drop을 하니 정상 drop이 되었다. 일정시간 경과 후 자동 세션 종료 설정도 가능하다. -- 현재 interactive 설정값 조회 (28800 초 이후 int..

WORK/DB 2022.11.29

오라클 콤마를 기준으로 가로 또는 세로로 (열, 행) 컬럼 추가하기

SELECT WEEK FROM WEEK_INFO 위와 같은 쿼리에 아래와 같은 데이터가 있다고 가정해보자. WEEK 1,2,3,4,5 월,화,수,목,금 이라는 형태로 볼 수 있는데 이 값을 콤마 기준으로 잘라 가로로, 또는 세로로 조회 해 보자. ========== 가로로 컬럼 만들기 ========== SELECT WEEKREGEXP_SUBSTR(WEEK, '[^,]+', 1,1 ) AS MON , WEEKREGEXP_SUBSTR(WEEK, '[^,]+', 1,2 ) AS TUE , WEEKREGEXP_SUBSTR(WEEK, '[^,]+', 1,3 ) AS WED , WEEKREGEXP_SUBSTR(WEEK, '[^,]+', 1,4 ) AS THU , WEEKREGEXP_SUBSTR(WEEK, '[^,..

WORK/DB 2020.06.16

TOP 또는 FOR XML을 함께 지정하지 않는 한 뷰,하위 쿼리 및 공통 테이블 식에서 ORDER BY 절을 사용할 수 없습니다.

MSSQL 에서 ORDER BY 실행 시 이런 에러를 볼 수 있다. 이런 에러를 간단하게 해결해 보자. SELECT T.* FROM( SELECT USER_ID , USER_NM FROM TB_USER_INFO ORDER BY USER_NM )T 위와같은 쿼리를 실행 했을 경우 TOP 또는 FOR XML을 함께 지정하지 않는 한 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 공통 테이블 식에서 ORDER BY 절을 사용할 수 없습니다. 라는 에러가 발생 할 것이다. 이럴때 해결방법은 아래와 같이 하위쿼리 안에 TOP 100 PERCENT 를 추가하면 된다. SELECT T.* FROM( SELECT TOP 100 PERCENT USER_ID , USER_NM FROM TB_USER_INFO ORDER ..

WORK/DB 2020.01.29