오라클 테이블 스페이스(Table Space)란 무엇인가? 오라클은 데이터를 관리하는 데이터베이스입니다. 데이터를 어딘가에 저장해놓고 사용하는 시스템이라고 볼 수 있습니다. 그리고 데이터 저장 단위 중 가장 상위에 있는 단위를 테이블 스페이스라고 합니다. 데이터 저장 단위는 물리적, 논리적단위로 나눌 수 있습니다. 물리적 단위는 파일을 의미하고 논리적 단위는 데이터블록 -> 익스텐트 -> 세그먼트 -> 테이블스페이스 이렇게 나뉩니다. 데이터 블록 여러개가 모여 익스텐트 하나를 만들고, 익스텐트 여러개가 모여 하나의 세그먼트를 구성하는 식입니다. 테이블 스페이스는 가장 상위개념입니다. 오라클 테이블 스페이스 사용법 SQL 개발 툴이 있으시면 개발 툴을 실행시키시면 되고 없으시다면 윈도우 실행창을 열고 SQ..
MYSQL이나 MSSQL에서 대표적인 데이터 타입 변환함수는 CONVERT인데요. 오라클에서는 동작하지 않습니다. 오라클에서 데이터 타입 변경을 하고 싶을때는 CONVERT가 아닌 다른 함수를 사용하여야 합니다. 함수명은 TO_[데이터타입]인데요. 대표적으로 TO_CHAR , TO_NUMBER, TO_DATE 등이 있습니다. TO CHAR (CHAR형으로 변경) --사용법-- SELECT TO_CHAR([컬럼명]) FROM [테이블명] --예제-- SELECT TO_CHAR(10000) FROM DUAL --INT TO CHAR SELECT TO_CHAR(SYSDATE) FROM DUAL --DATE TO CHAR SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL --D..
오라클에서 조건을 주는 방법은 여러가지가 있습니다. 대표적으로는 CASE문 IF문이 있는데 이런 조건문을 사용하게 되면 쿼리문이 쓸데없이 길어질요소가 존재합니다. 하지만 조건이 동등문(=)일경우에 간단하게 사용할 수 있는 DECODE함수라는것이 있습니다. 이번 포스팅에서는 오라클에서 제공하는 DECODE함수를 통해 간결하게 조건문을 주는 방법에 대해 알아보도록 하겠습니다. 경우에 따라서는 DECODE함수를 중첩해서 쓰거나 서브쿼리와 같이 사용하셔도 됩니다. DECODE함수는 어제 포스팅했었던 NVL함수와 마찬가지로 오라클에서만 존재하는 함수이므로 MY_SQL이나 MS_SQL과의 호환을 염두하신다면 사용을 피하셔야합니다. 사용법 DECODE(컬럼,조건,TRUE 결과값,FALSE 결과값) 예제 --TYPE ..
오라클을 사용하다보면 NULL값을 다른 함수로 치환해주어야하는 경우가 많습니다. 이럴경우 오라클에서 제공하는 NVL함수를 써서 쉽게 처리할 수 있는데요. NVL함수는 매우편리하지만 오라클에서만 제공하는 함수이다보니 다른 데이터베이스와의 호환을 염두해둔다면 피해야할 함수이기도 합니다. (이 쿼리로 짜놓고 MY_SQL이나 MS_SQL에서 사용한다면....?? 끔찍합니다. ㅠㅠ) 1. NVL함수 사용법 NVL(컬럼,NULL일경우 반환값) NVL(컬럼,0) -- 컬럼의 값이 NULL일경우 0으로 치환 NVL(컬럼,'') -- 컬럼의 값이 NULL일경우 ''으로 치환 NVL(컬럼,SYSDATE) --컬럼의 값이 NULL일경우 현재날짜로 치환 예제 (COMPANY_NO)가 NULL이면 ''으로 치환 SELECT N..
오라클 소수점 처리를 할때 유용하게 사용할 수 있는 함수가 3가지가 있습니다. 바로 CEIL, ROUND, TRUNC 인데요. 각각 소수점을 올림, 반올림, 버림 해줄 수 있는 함수입니다. 소수점 올림 (CEIL) --사용법 SELECT CEIL([컬럼])AS [명칭] FROM [테이블명] --자릿수 지정은 없으며 무조건 소수점첫번째에서 올림 --예제 SELECT CEIL(10.423)AS PAY FROM DUAL --결과 : 11 SELECT CEIL(PAY)AS PAY FROM EMP_TABLE SELECT CASE SUM(ERR) WHEN 0 THEN 0 ELSE --0으로 나눌경우 에러가 나기에 예외처리 CEIL(COUNT(MOD)/COUNT(ERR)*100) END AS TEST_PERCENT ..
가끔 저장된 데이터는 다르지만 테이블 구조는 같은 경우가 있습니다. 이 구조가 같은 테이블을 같이 조회할 경우에는 컬럼이같기에 UNION을 사용하면 굉장히 효율적입니다. UNION을 사용하였기에 두 테이블에 있는 값은 합쳐지지 않고 따로따로 조회가 되어 합쳐지는데요. 하지만 가끔은 이렇게 조회된 두테이블의 결과 값을 서로 합쳐줘야할 때가 있습니다. 대표적으로 두 테이블의 통계를 낼때가 있겠군요. 예제 SELECT S.MODULE, SUM(S.ERR)AS ERROR_COUNT, --에러갯수 SUM(S.MOD) AS MOD_COUNT --수정갯수 FROM ( SELECT A.MODULE COUNT(A.ERR) AS ERR, COUNT(A.MOD) AS MOD, FROM ERROR_TABLE_1 A --1번테..
테이블에 PK로 설정되어있는 컬럼에 데이터가 중복으로 들어가면 무결성 제약조건에 걸리게됩니다. 이것을 예외처리 해주지 않는다면 프로그램에 치명적일 수 있는데요. 이 경우 데이터가 없을경우에만 Insert를 하는 형식으로 변환하여 프로그램의 안정성을 더해줄 수 있습니다. 오라클에 데이터가 없는 경우에만 Insert를 하는방법은 WHERE조건문에 NOT EXISTS(데이터 SELECT) 를 하는 방법으로 구현할 수 있습니다. INSERT INTO DEPT_TABLE ( SQ, COMPANY, DEPT, ) SELECT 1, '테스트회사', '테스트부서' FROM DUAL WHERE NOT EXISTS ( SELECT SQ FROM DEPT_TABLE WHERE SQ = 1, COMPANY = '테스트회사',..
NVL함수와 MAX함수를 활용하여 오라클 데이터 insert시 컬럼의 최대값+1을 저장하는 방법입니다. INSERT INTO DEPT_TABLE ( DEPT_SQ, COMPANY, DEPT_NM ) VALUES ( (SELECT NVL(MAX(DEPT_SQ),0)+1 FROM DEPT_TABLE),--데이터가없으면 0 데이터가 있으면 최대값 +1 '테스트회사', '테스트회사명' )
오라클 SELECT한 데이터를 바로 UPDATE하는 법입니다. 서브쿼리를 활용하면 간단하게 해결할 수 있습니다. 문법 UPDATE [UPDATE 테이블].[별칭] SET [UPDATE 테이블 별칭].[컬럼] = ( SELECT [조회 테이블 별칭].[컬럼] FROM [조회테이블] B ) 예제 UPDATE DEPT A SET A.PC_CD = ( SELECT B.PC_CD FROM BIZAREA B WHERE A.COMPANY_CD = B.COMPANY_CD AND A.BIZAREA_CD = B.BIZAREA_CD )
오라클 조회 프로시저 예제입니다. 필요하신분은 복사하셔서 사용하시면 좋을 것 같습니다. CREATE OR REPLACE PROCEDURE TEST_PROC /* IN Parameter */ ( P_PLANT_CODE IN VARCHAR2,--공장코드 P_DT_OUT IN VARCHAR2, --출고일 P_ITEM_CODE IN VARCHAR2, --품목명 P_COMPANY_CODE IN VARCHAR2--회사코드 ) IS BEGIN SELECT A.PLANT_CODE, B.PLANT_NAME, A.DT_OUT, A.ITEM,_CODE, B.ITEM_NAME, A.RMK FROM TEST_TABLE A LEFT OUTER JOIN TEST_TABLE2 B ON A.COMPANY_CODE = B.COMPANY..
오라클 전체테이블 중에서 '원가요소'가 포함되어있는 Comment를 '관리계정'으로 바꾸라는 요청을 받았습니다. 사용하는 용어가 달라졌다고 하더군요.... 이런 요청을 받고 전체 테이블을 일일이 뒤져가면서 원가요소가 포함되어있는 Comment를 찾아서 관리계정으로 바꿔주는것은 굉장히 무식한 짓입니다. 쿼리문을 통해 한번에 간편하게 Comment를 바꾸는 방법에 대해 알아보겠습니다. 전체 테이블중에서 원하는 Comment만 검색 & 수정하기 사용한 방법 SELECT A.TABLE_NAME, A.COLUMN_NAME, A.DATA_TYPE, DATA_LENGTH, COMMENTS FROM USER_TAB_COLUMNS A,USER_COL_COMMENTS B WHERE A.COLUMN_NAME LIKE '%%..
사용자가 테이블을 DROP하거나 ALTER한다면 큰 문제가 발생할 수 있습니다. 이런 문제를 방지하기 위해 DDL을 사용할 수 있는 관리자(MASTER) 계정을 따로두고 사용자(USER) 계정에는 해당 테이블의 SELECT, INSERT, UPDATE, DELETE 권한만 부여하여 운용하는 경우가 많습니다. 이번 포스팅에서는 관리자(MASTER)계정에서 사용자(USER)계정에 DML권한을 부여하는 방법에 대해 알아보도록 하겠습니다. 테이블에 권한 부여 --테이블에 DML권한 주기 --방법1 GRANT SELECT ON [TABLE] TO [USER_ID]; GRANT INSERT ON [TABLE] TO [USER_ID]; GRANT DELETE ON [TABLE] TO [USER_ID]; GRANT U..
VARCHAR2는 한글을 저장할 수 있는 크기와 영문을 저장할 수 있는 크기가 다릅니다. 영문은 1바이트고 한글은 2바이트이기 때문입니다. 이렇게 되면 나중에 여러가지 문제가 생길 수 있기에 가끔 테이블 생성 시 VARCHAR2타입을 CHAR형으로 바꿔서 생성시켜주곤 합니다. (자칫하면 공간낭비가 될 수 있기 때문에 자주쓰는 방법은 아닙니다.) 요새는 툴이 좋아 CREATE문을 따로 작성하지 않아도 알아서 작성해주는 툴이 많이 있습니다. 하지만 툴이 만들어준 Create문을 보면 VARCHAR2타입으로 되어있을겁니다. 여기서 테이블의 VARCHAR2형을 CHAR형으로 바꿔주려면 CREATE문 안에 있는 VARCHAR2을 전부 CHAR로 바꿔주어야 하는데 이것은 굉장히 귀찮은 일입니다. 이럴때 요긴하게 사..