DataBase
-
[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 프로시저 작성 중에 '컬럼 크기가 작다는 에러'를 받고 찾아서 알아낸 결과이다! 그리고 좀 더 찾아보니 스택오버플로우에 좋은 정리가 있어서 링크를 남긴다.
-
[Oracle] MySQL과 Oracle 테이블 JOIN 걸어서 UPDATE하는 방법DataBase/Oracle 2018. 9. 23. 16:23
MySQL은 쿼리 짜기가 Oracle에 비해서 문법이 자유로운 편인 것 같다. MySQL에서는 테이블 join을 걸어서 update를 하는 방법이 참 쉬워보이는데, Oracle은 요래조래 칠게 많았다 ㅠ_ㅠ 두 DB를 비교하면서 설명해보겠다. 먼저, MySQL. 123456789/*MYSQL에서 JOIN된 테이블 UPDATE */ UPDATE chocolate_table chocolateINNER JOIN milk_table milk -- 조인할 테이블 ON chocolate.common_seq = milk.common_seq SET chocolate.brand_name = 'delicious choco' WHERE chocolate.company_name = 'zorba' AND milk.expire_..
-
[Oracle] SQL문으로 중복 데이터 삭제하기DataBase/Oracle 2018. 9. 21. 11:49
오라클에서 기존 테이블에 pk를 설정해주고 싶은데 중복 데이터가 있을 경우, violate가 뜬다. 중복 데이터를 없애야 pk 생성이 가능해진다. 금방 방법을 찾을 수 있었고, 종종 써야할 거 같아 출처를 밝히고 정리!(혹시 나중에 블로그를 없애시면 글도 사라지니까) 총 방법이 3가지가 있었는데, 첫 번째, 12345678910111213DELETE FROM chocolate_table(테이블명) WHERE ROWID IN ( SELECT ROWID FROM ( SELECT * FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY 컬럼명 ORDER BY 컬럼명) AS num FROM chocolate_table(같은 테이블 명) ) WHERE num > 1 -- num의 값이 ..