DataBase/Oracle
-
[Oracle] ibatis에서 오라클 프로시저(procedure)를 결과 값으로 받기(사용법)DataBase/Oracle 2018. 10. 31. 10:41
스프링 개발을 하시는 분들의 글을 읽어보면 오라클 프로시저는 보통 파라미터에 담아서 사용한다. 나도 그렇게 쓰고 싶었지만, mysql도 같이 사용하기 때문에 파라미터가 아닌 결과 값을 받아와야 했다.(mysql은 프로시저에서 select가 가능해 select한 결과를 받아올 수 있다. 하지만 오라클은 select가 안됨.) 예를 들면, 1Map receiveMap = procedureDAO.getAnyList("procedureDAO.getAnyList", param);cs 위와 같은 코드가 있으면 오라클 프로시저의 경우 out 변수가 param에 담긴다. 하지만, 나의 조건은 receiveMap에 담아야하는 방법을 찾아야 했다. 거의 모든 분들이 param에서 값을 꺼내쓰는 글 밖에 없었고, 하루 종일..
-
[Oracle] ORA-04091: table 000 is mutating 에러와 autonomous transactions(자율 트랜잭션)DataBase/Oracle 2018. 10. 27. 16:09
오라클에서 function을 이용해 update 하는 중에 발생한 에러이다.(사실 이 에러는 회사 선임님쪽에서 발생했다.) mutating?이 뭐지. 찾아봤는데'변이'라는 뜻을 가지고 있었다. 흔히 우리가 말하는 돌연변이(mutant)를 말할 때 같은 의미겠지? ㅎㅎ 변이하고 있는 테이블에 참조를 걸려고 하니 에러가 생긴 것이었다. 아니나 다를까 function을 보니 update 해주는 table을 참조해서 값을 가져오는 기능이었다. 근데 이게 mariaDB(혹은 mysql)에서는 잘 돌아간다. 회사에서 항상 우리끼리 'mariaDB는 너무 관용적이다'라고 말한다. 안될 것 같은 쿼리도 mariaDB에서 잘 돌아간다. 회사에서 아래와 같은 방법으로 짜여져 있었다.(매우매우 간소화시켜서 올려둡니다) qu..
-
[Oracle]ORA-00054: resource busy and acquire with NOWAIT specified or timeout expiredDataBase/Oracle 2018. 10. 19. 12:44
오류 보고 -ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired00054. 00000 - "resource busy and acquire with NOWAIT specified or timeout expired"*Cause: Interested resource is busy.*Action: Retry if necessary or increase timeout. 락이 걸려서 생기는 에러란다. DBA 권한을 이용하면 해당 출처를 이용하면 해결이 가능하다. 하지만, 난 DBA권한이 회사에서 없다. ㅠㅠ 급하게 해결하려니, 여기서 아이디어를 얻어서 해결했다. 세션을 커밋시키는 것이다. autocommit을 꺼두고 이것저것 했..
-
[Oracle] mysql의 DATE_FORMAT을 오라클에서 사용하기(DATE형식 formatting)DataBase/Oracle 2018. 10. 16. 18:14
mysql의 DATE_FORMAT은 DATE형을 원하는 모양으로 포맷시켜준다. mysql의 DATE_FORMAT 경우, 1SELECT DATE_FORMAT('2017-10-10 12:12:12', '%Y-%m-%d %h:%s:%i');cs mysql에서 Y는 년도, m은 월, d는 일, h는 시, s는 분, i는 초를 의미한다. Oracle의 경우, 1. 들어온 파라미터가 char형일 때, 1SELECT TO_CHAR(TO_DATE('2017-10-10 12:12:12', 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;cs char형의 경우, date형식으로 바꿔준 뒤 char형으로 바꿔준다. to_date만 할 경우, 원하는 포맷형식으로 볼..
-
[Oracle] 계층구조 쿼리 정리란?(퍼온 글)DataBase/Oracle 2018. 10. 4. 17:47
완전 깔끔하게 정리를 잘 해주셨는데, 이게 2002년 글이라니... 여전히 유용한 게시물이다 +_+ 사용법 잊을 때마다 다시 보면서 써먹어야지. 출처: http://www.gurubee.net/lecture/1300 계층구조 쿼리란?오라클 데이터베이스 scott 유저의 emp 테이블을 보면 empno와 mgr컬럼이 있으며, mgr 컬럼 데이터는 해당 사원의 관리자의 empno를 의미 한다.예를 들어서 아래의 데이터를 보면?1234EMPNO ENAME SAL MGR------ ------- ------ ------ 7369 SMITH 800 7902 7902 FORD 3000 7566- empno 7369사원의 관리자는 7902의 empno를 가진 사원이며- empno 7902사원의 관리자는 7566의 e..
-
[Oracle] 값이 number형인지 체크해주는 함수 만들기(IS_NUMBER)DataBase/Oracle 2018. 10. 3. 10:28
값이 number형인지 체크해주는 함수를 만들어주면 개발할 때 간단히 사용할 수 있을 것 같아 스택오버플로우를 참고해서 만들었다. IS_NUMBER로 함수명을 정했다.(이게 숫자인지 문자형인지 구분해주는 함수) number형이 맞다면, 1을 반환하고 그렇지 않다면 0을 반환한다. 12345678910111213141516CREATE OR REPLACE FUNCTION "IS_NUMBER" (IN_STRING IN VARCHAR2) RETURN INTIS V_NUM NUMBER; BEGIN V_NUM := TO_NUMBER(IN_STRING); -- 숫자로 바꾼다 RETURN 1; EXCEPTION WHEN VALUE_ERROR THEN -- 숫자로 바꿨는데 문자열이 포함되어 있으면 예외를 RETURN 0..
-
[Oracle] mysql 기능인 ON UPDATE CURRENT_TIMESTAMP를 oracle에서 구현하기DataBase/Oracle 2018. 10. 2. 15:56
mysql에서 ON UPDATE CURRENT_TIMESTAMP란 데이터가 바뀔 때마다 자동으로 원하는 컬럼에 현재 시간으로 자동 업데이트 해주는 기능이다. 보통 '수정한 날짜'에 해당하는 컬럼에 많이 쓰이는 것으로 보인다. mysql에서는 테이블 생성 당시에 해당 기능을 만들 수 있다. 1234CREATE TABLE `demo_table` ( `modified_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)Colored by Color Scriptercs 하지만, oracle에는 이러한 기능이 없어 trigger로 구현해야 한다. oracle 구현방법도 어렵지 않다. 1234567create or replac..
-
[Oracle] VARCHAR2(10) 과 VARCHAR2(10 CHAR)의 차이점DataBase/Oracle 2018. 10. 2. 09:50
간단하게 말하면, varchar2(10)만 선언하면 10byte를 의미하고, varchar2(10 char)는 10개의 글자를 의미한다. 그래서 varchar2(10)의 경우는 10글자를 담을 수 없다. 1글자에 1 byte를 넘는 경우도 있으니까 말이다. 하지만, varchar2(10 char)의 경우 byte크기와 상관없이 10글자를 담을 수 있다. 보통 한글의 경우, 한 글자당 2 byte로 알고 있는데, 이럴 경우 varchar2(10)의 경우에는 한글 10자를 쓸 수 없다. oracle 프로시저 작성 중에 '컬럼 크기가 작다는 에러'를 받고 찾아서 알아낸 결과이다! 그리고 좀 더 찾아보니 스택오버플로우에 좋은 정리가 있어서 링크를 남긴다.