db
-
[Oracle] 계정 잠금 해체개발/Database 2019. 7. 20. 10:20
JDBC 드라이버 통해서 쿼리를 날렸는데 갑자기 "the account is locked" 라는 메시지가 뜨면서 프로그램이 안 돌아간다는 제보를 받았다. 원인은 패스워드 유효기간 만료일수도 있고, 관리자가 직접 계정 lock을 걸어서 계정이 잠겼을 수도 있다는데 나도 DB 무식자다보니 정확한 원인은 모르겠다. 아마도 다시 DBA를 만나게 되면 여쭤볼 수는 있겠다만 언제 오실지 모르니... 우선 아래 쿼리를 날려서 잠긴 계정을 확인 1 2 3 4 5 6 SELECT * FROM DBA_USERS WHERE ACCOUNT_STATUS LIKE 'LOCKED%'; cs 전달받은 대로 계정 하나가 잠겨있는 상태였다. 잠긴 계정을 푸는 쿼리도 날려본다. 1 2 3 ALTER USER [USER_NAME] ACCO..
-
[MySQL] MySQL에서 ROW_NUMBER 사용하기개발/Database 2019. 2. 19. 17:43
오라클, 티베로..등에서 쿼리를 짤 때 툭하면 ROW_NUMBER() OVER 를 줘서 뽑다가 MySQL로 오니 당연히 신택스 에러가 떨어진다. MySQL에서는 특이하게도 SELECT 절에서 function 을 활용한다거나 이런 방식이 아니라변수를 선언하고 이 변수에 1씩 더해서 뽑아내는 방식으로 Row num을 줄 수 있다. 알고보니 MySQL에서는 쿼리에서도 변수를 선언해서 사용할 수 있고이걸 응용해서 뽑아내는 것 같다. 일단 쿼리를 보자면 요렇게 123456789101112SELECT @ROWNUM := @ROWNUM + 1 AS ROWNUM ,TB.* FROM ( SELECT NOTE_NO ,NOTE_TITLE ,NOTE_CONTENTS FROM EXAMPLE.NOTE ORDER BY NOTE_N..
-
[postgreSQL] 멀쩡한 컬럼인데 column does not exist 오류가 발생할 때개발/Database 2019. 1. 17. 09:37
이번에 시작한 토이 플젝에는 한번도 안 써본 디비를 써보자! 해서 야심차게 postgreSQL을 도입하지만 처음 짜넣은 아주 간단한 select 문 실행에서부터 막혀버렸다ㅠ.ㅠ SELECT COUNT(*) FROM V WHERE VOCA = #{voca} 라는 아주 아주 간단한 쿼리 문인데도 에러가 뜨면서 Column 'voca' does not exist 라고 찍힌다. 대체 왜??? 혹시나 오타가 났나 싶어서 다시 들여다봤지만 오타도 아니었다. 검색해보니 내가 지금까지 써본 DB는 대문자가 기본이고, 컬럼이나 테이블명에서는 대소문자 구별이 없어서 쿼리 짤 때 대문자로 쓰든 소문자로 쓰든 상관이 없었으나postgreSQL은 소문자가 기본인게 모든 것의 원인이었다..... (출처 : https://post..
-
SYS_CONTEXT 함수로 세션정보 추출하기개발/Database 2019. 1. 14. 13:19
세션에 담긴 접속IP주소를 추출하려면 당연히 자바 컨트롤러에서 뽑아내는 것이라고 생각했는데이번 프로젝트를 하면서 DB에서 쿼리로 뽑아낼 수도 있다는 것을 알았다. 지금까지 확인한 바로는 오라클과 티베로에서 SYS_CONTEXT 라는 함수를 사용하여 추출이 가능하다. (출처 : https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions165.htm) 사용법- SYS_CONTEXT('namespace' , 'parameter') - namespace 로 'userenv' 를 입력하면 현재 세션의 환경정보 추출 가능- 예 : IP 주소 추출 시SELECT SYS_CONTEXT('userenv', 'IP_ADDRESS') FROM DUAL;
-
TABLE Function 이라는 것도 있다개발/Database 2019. 1. 9. 14:20
DB 담당 수석님께서 짜서 던져주신 쿼리를 보다가 난생 처음 보는 신택스를 만나서 검색오늘도 출처는 구루비 (http://www.gurubee.net/lecture/2238) 아직 내용을 완벽하게 이해한 것이 아니라 간단하게 요약만 남기고 끝낸다...흐흑 Table Function - Result Set 전체를 인자 값으로 받아서 결과를 Return 하고자 할 경우 유용하게 사용 가능 - Table Function / Pipelined Table Function - SELECT * FROM TABLE( Row 출력 Function ) 형태로 사용 가능
-
데이터베이스의 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:/..