반응형

DB 19

프로시져 오류처리 방법

MSSQL 프로시져를 만들었을때 오류 처리 해주는게 좋지 않을까한다.SELECT 문은 필요로 하지 않지만 CURSOR를 통해서 INSERT문 DELETE문을 만들때는 TRY구문으로오류처리 해주기를 바란다.TRY CATCH문을 사용하여 오류가 발생시에 PRINT문으로 찍어보거나실행내용을 DB에 남기는 방법중 하나를 택하기 바란다.DB에는 컬럼을 상황에 맞게끔 CLOB, BLOB 형태로 만드는게 좋으며나는 DB만드는게 귀찮다 하시면 PRINT를 찍어도 무방함EX=====================================================    BEGIN CATCH    IF ERROR_STATE() = 1    BEGIN    SELECT @P_LOG = '[ERROR]NUMBER : ' ..

DB 2024.12.06

테이블 구조를 변경

MSSQL 사용하는 프로젝트를 뛰고 있어서 MSSQL로 작성해보았다.계속해서 DATA 가 쌓이는 경우가 아니라면 항상 백업으로 DATA를 만들고 테이블을 다시 생성후 백업한 DATA를 넣는게 좋다개발할때 항상 유용하게 사용하는 방법을 공유하고자 한다.컬럼 하나를 추가하는데 초심자들은 DROP 해서 DATA도 삭제하는 경우가 많은데 물어보면 DATA 옮기는게 힘들거나 귀찮다는 분들이 있는데 아래의 방법으로 귀찮더라도 생활하 하자나의 경우는 3번과 5번을 동일 편집기에 넣고 실행시킨다.  1번부터 4번까지 하는데 익숙해 지면 2분도 걸리지 않는다. 1. DATA백업SELECT * INTO TMPTTABLE FROM TTABLE2. 테이블 스키마 생성테이블 마우스 우클릭 -> 테이블 스크립트 -> CREATE..

DB 2024.12.04

MSSQL 소수점 처리 방법 및 계산시 유의점

소수점 자리 처리는 아래와 같다.올림 : CEILEX ) SELECT CEIL([숫자컬럼]) AS [컬럼명칭] FROM [테이블명]반올림 : ROUNDEX ) SELECT ROUND([숫자컬럼], [자릿수]) AS [컬럼명칭] FROM [테이블명]버림 : TRUNCEX ) SELECT TRUNC([숫자컬럼].[자릿수]) AS [컬럼명칭] FROM [테이블명] DB에서 소수점 처리도 중요하지만 나누기 할때 더 신경써야 한다.분모는 항상 0인경우를 0나누기 오류가 발생한다.EX ) SELECT CASE WHEN ISNULL([분모],0) = 0 THEN 0 ELSE [분자] / [분모] END FROM [테이블명] 나누기를 소수점으로 표현하고 싶으면 분모를 소수점 표현한 후에 나누어 주면 된다.

DB 2024.11.20

오라클 속도향상 HINT 사용

◆ 개요힌트는 SQL 튜닝의 핵심부분으로 일종의 지시구문이다.SQL에 포함되어 쓰여져 Optimizer의 실행 계획을 원하는 대로 바꿀 수 있게 해준다.오라클 Optimizer라고 해서 항상 최선의 실행 계획을 수립할 수는 없으므로테이블이나 인덱스의 잘못된 실행 계획을 개발자가 직접 바꿀 수 있도록 도와주는 것이다.사용자는 특정 SQL 문장에서 어떤 인덱스가 선택도가 높은지에 대해 알고 있는데이 경우 오라클 서버의 Optimizer에 의존하여 나온 실행 계획보다 훨씬 효율적인 실행 계획을 사용자가 구사할 수 있다.◆ 사용힌트를 사용하여 아래와 같은 것들을 할 수 있다.액세스 경로, 조인 순서, 병렬 및 직렬 처리, Optimizer의 목표(Goal)를 변경 가능하다.◆ 오라클 힌트 사용예 SELECT /..

DB 2024.11.19

MSSQL 문자 치환 각행에 있는 문자를 하나의 문자로

STUFF() / FOR XML PATH()STUFF문자열의 위치와 길이를 지정하여 다른 문자로 치환하는 함수STUFF(문자열, 위치, 길이, 치환할 문자) FOR XML PATH쿼리의 결과 데이터를 XML 형태로 표현 FOR XML PATH('row element명')예제)WITH TEST_TABLE AS(    SELECT 1 as seq, '햄버거' AS name UNION ALL    SELECT 1 as seq, '부대찌개' AS name UNION ALL    SELECT 2 as seq, '된장찌개' AS name UNION ALL     SELECT 2 as seq, '소고기전골' AS name UNION ALL    SELECT 3 as seq, '라면' AS name)SELECT Nam..

DB 2024.11.13

WHERE 조건에 CASE문 처리

사용법만 알면 자주 사용하게 되는것중에 하나가 WHERE 조건에 CASE문을 넣으로 조건에 맞으면 조건절 실행DECLARE @PARAFLAG VARCHAR(MAX) = 'Y'SELECT AA, BB, CC, DD  FROM TEMPTABLEWHERE 1 = CASE WHEN @PARAFLAG = 'Y' THEN 1 ELSE CASE WHEN THEN CC = 'TYPE' ELSE 1 ELSE 0 END END받은 변수DATA가 Y인경우 CC컬럼의 값이 TYPE인 DATA를 가져옴Y가 아닌경우 WHERE 조건절은 1 = 1 로 전체 검색을 한다. 사용방법에 따라 유용하게 쓰인다.

DB 2024.11.06

DB 정렬 ORDER BY 관련

DB 조회 구문을 만들때 ORDER BY를 사용하다가 아무렇지 않게 실수하는 경우가 있다. 아래 두구문의 같은 값인것 같지만 결과는 다르게 나온다. 왜 그럴까? 그건 바로 DATA 타입 때문이다. 위에 구문은 SEQ가 문자형이고 아래는 숫자형이다.쿼리에 자신있다고 하다가 결과도 보지 않고 담당자와 이야기 하다가 결과가 이상한데요 라는 부끄러운 결과를 볼수 있다. 자만하지 말고 자신이 만든 쿼리를 항상 테스트 하는 습관을 기르도록 하자예시1)WITH TMPTABLE AS  ( SELECT '1' AS   SEQ UNION ALL SELECT '2' AS  SEQ UNION ALL  SELECT '10' AS   SEQ UNION ALL SELECT '11' AS  SEQ ) SELECT *   FROM T..

DB 2024.11.05

오라클 다중 IN MSSQL에서는 EXISTS로 해보자

오라클을 사용하시는분들이 아래 IN절을 사용하다 MSSQL을 사용하게 되면 불편해 하신다.아래 문장이  도움이 되기를 바란다.SELECT * FROM TEMPA WHERE (A, B) IN (                         SELECT A, B                           FROM TEMPB                         WHERE C ='Y')DELETE FROM TEMPA WHERE (A, B) IN (                         SELECT A, B                           FROM TEMPB                         WHERE C = 'Y' )위에 SELECT 문을 DELETE로 바꿔서 아주 잘사용하..

DB 2024.11.04
반응형