개발/Database
-
데이터베이스의 SYNONYM 은 뭐하는 놈일까개발/Database 2018. 9. 7. 09:20
오늘도 출처는 구루비와 오라클 공식 문서 출처 : http://www.gurubee.net/lecture/1038 https://docs.oracle.com/apps/search/search.jsp?word=SYNONYM&product=b28359-01&book=b28286 SYNONYM이란? - 테이블, 뷰, 시퀀스, 오퍼레이터, 프로시저, 패키지 등 객체에 대한 별칭 - 객체에 대한 직접적인 참조 - 객체의 실제 이름과 소유자, 위치를 감춰 데이터베이스 보안 개선 가능 - 객체의 Public Access 를 제공 - 객체의 긴 이름을 사용하기 편한 짧은 이름으로 해서 SQL문을 단순화 할 수 있음 - 참조하고 있는 객체의 이름이 바뀌거나 이동했을 때, 해당 객체를 사용하는 SQL 문을 모두 고칠 필요..
-
PL/SQL 실행 블럭에서 동적 쿼리 작성하기개발/Database 2018. 8. 8. 15:44
PL/SQL 내부에서 동적으로 스키마명과 테이블명을 받아 전체 데이터 건수를 뽑아내는 쿼리 결론부터 말하자면 쿼리 스트링을 만들어 준 다음에'EXECUTE IMMEDIATE 쿼리' 명령어를 추가해주면 된다. CREATE OR REPLACE FUNCTION F_TEST(P_S_NAME VARCHAR2, P_T_NAME VARCHAR2) --스키마명과 테이블명을 파라미터로 받음RETURN NUMBERISV_TMP NUMBER; --데이터 건수를 담아 리턴할 변수V_TMP_QUERY VARCHAR2(4000); --쿼리문을 담을 변수 BEGIN V_TMP_QUERY := 'SELECT COUNT(*) FROM ' || P_S_NAME || '.' || P_T_NAME ; --동적 쿼리 작성EXECUTE IMM..
-
PL/SQL 에서의 FUNCTION vs PROCEDURE개발/Database 2018. 8. 8. 15:19
FUNCTION 은 리턴값이 있는 서브프로그램이고,PROCEDURE 는 리턴값이 없는 서브프로그램이다. 사실 와꾸만 써놓고 정리를 안해서 안 올리고 있지만 VBA에서나 PL/SQL에서나 FUNCTION과 PROCEDURE 의 차이점은 거의 비슷하다....(내가 잘 몰라서 똑같다고는 말 못함) 직접 짜다보니 왜 프로그램이라는 명칭을 붙여줬는지 이해가 간다. 잘 써먹으면 정말 쪼그마한 프로그램 하나를 붙여서 쓰는 효과가 나기에...ㅎ 뭔소리야 아무튼 거의 2년간 PL/SQL을 만질 일이 없어서 까먹고 있다가 오랜만에 구문 보면서 짜려니 다른 분들의 설명이 잘 눈에 안 들어와서 내 맘대로 다시 정리한다.오늘도 출처는 훌륭한 구루비 선생님http://www.gurubee.net/lecture/1342http:/..
-
오라클 DB 테이블스페이스 용량 늘리기개발/Database 2018. 8. 2. 16:21
휴가철을 맞아 팔자에도 없는 DBA 노릇을 갑자기 하느라 쩜 마니 당황했다ㅎ.....한번 해보면 별거 아닌데 한번도 안 해봐서 진짜 쌩난리를 치면서 했다. 담부터는 그러지 말자ㅠ 1. 테이블스페이스의 이름 확인 SELECT TABLESPACE_NAME, DATAFILE_COUNT, BLOCK_SIZE FROM DBA_TABLESPACES ; 2. 데이터 파일의 이름 확인 1에서 확인한 테이블스페이스의 이름을 가지고 아래 쿼리를 실행 FILE_NAME 컬럼의 값이 바로 데이터 파일의 이름임 SELECT FILE_NAME, FILE_ID, TABLESPACE_NAME, STATUS FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = '' ; 3. 테이블스페이스의 용량을 늘려주기 -..
-
SQL을 활용해서 스네이크 케이스를 카멜 케이스로 바꾸기개발/Database 2018. 7. 26. 16:51
INITCAP() 이라는 함수를 써서 쉽게 바꿔줄 수 있다.물론 딸랑 INITCAP() 하나만 써서는 안되고 다른 함수들을 같이 섞어서 써주면 가능 결론만 먼저 말하자면 아래처럼 쓰면 된당SUBSTR ( REPLACE ( INITCAP ( '1' || 대상문자열 ), '_' ), 2) 이제 안에서부터 하나씩 쪼개보겠음 1. INITCAP() - 대상 문자열에서 각 단어의 첫 글자만 대문자로, 나머지는 소문자로 변환 - '1' || 'ABC_DEF_GHI' 로 문자열 앞에 '1' 은 왜 붙였나? ∵ INITCAP 을 쓰면 무조건 단어의 첫글자를 대문자로 변환해주는데, 카멜 케이스는 맨 앞 단어의 첫 글자는 소문자가 되야 하기 때문에 앞에 다른 문자를 아무거나 붙여서 맨 앞 단어의 첫 글자가 대문자가 되는 ..
-
나도 WITH절을 써보자개발/Database 2018. 7. 26. 13:50
출처는 내 영혼의 구원자 구루비 http://wiki.gurubee.net/pages/viewpage.action?pageId=27427118 http://www.gurubee.net/lecture/1505 http://wiki.gurubee.net/pages/viewpage.action?pageId=27427116 1. WITH절 사용 시 장점 = 데이터 중복 액세스 제거- SQL에서 동일한 데이터를 반복 처리할 경우, 성능개선방법으로 WITH절을 많이 활용- 데이터 건수는 적으나 데이터 추출 시 I/O 처리량이 많은 경우에 효과적- 여러 부분에 사용될 데이터를 1회 추출하여 Global Temporary Table 에 저장하고, 요청 시 저장된 데이터만 읽어 처리하면 되므로 SQL 성능 개선 및 I/..
-
DELETE VS TRUNCATE VS DROP개발/Database 2018. 7. 26. 11:20
요즘 쿼리 짜기에 재미를 붙여서 신나게 쿼리를 뚱땅뚱땅 만들고 있는데INSERT 쿼리문이 시작하기 전에 TRUNCATE 문을 붙여주라는 명을 받았다. 그러고보니 CREATE TABLE...시작 전에는 DROP TABLE.... 을 붙여주고INSERT INTO... 시작 전에 TRUNCATE...를 붙여주는걸 스크립트에서 종종 발견했다.무슨 차이인지 검색해보니 이미 너무 알아보기 쉽게 잘 정리된 것이 있어서 퍼옴 출처 : https://wikidocs.net/4021 * DELETE, TRUNCATE, DROP 명령어의 차이점 이 그림을 보면 정말 명확하게 차이점이 드러난다. 1. DELETE - 데이터만 지워지고 테이블 용량과 인덱스 등은 삭제되지 않음 - WHERE 조건을 걸어 특정 데이터만 삭제 가능..
-
DECODE 와 CASE : 과연 그놈이 그놈일까개발/Database 2018. 7. 18. 15:05
DECODE와 CASE를 잘 쓰면 소스 코드 짤 때의 삽질을 엄청나게 줄일 수 있기 때문에 쿼리 짤 때 요놈들을 자주 쓰게 된다.이걸 배울 때는 DECODE와 CASE는 비슷하게 쓰일 수 있다~ 정도로만 이해하고 넘어갔는데오늘 쿼리를 짜면서 문득 이게 별 차이가 없다면 굳이 두개가 다 있을 필요가 없다는 생각이 들었다.그래서 좀 더 파보는 시간을 가져보도록 한다. 1. DECODE DECODE(값, IF1, THEN1, IF2, THEN2, .... ) 2. CASE CASE 값 WHEN IF조건1 THEN1 WHEN IF조건2 THEN2 ....ELSE END 3. 차이점 물론 신택스가 다르므로 쿼리도 달라진다. 예) NUM 컬럼의 값이 1이면 첫번째, 2면 두번째, 3이면 세번째, 다른 값이면 기타를..