부적합한 열이름(동적으로 컬럼명 사용할 시 )

개발/DB 2020. 11. 30. 17:04

티베로 DB를 사용 하던 도중

JDBC-90611:ERRJD 해당 에러를 확인했다.

쿼리도 이상없고, 소스도 이상없는것 같아서 한참동안 헤메다가 원인을 발견했다.

 

ibatis를 사용하는 경우 동적으로 table name과 column name을 생성하여
쿼리를 실행해야 하는 경우가 발생한다.

예를 들면 다음과 같다.
<select id="fileInfo"  resultClass="java.lang.String" parameterClass="java.util.Map">
    SELECT $columnName$
      FROM $tableName$
    WHERE $pkName$ = #pkValue#
</select>

전혀 이상없는 구문이나 실행시 에러가 발생한다.
이상하게도 처음 실행시에는 에러가 발생하지 않으나,
두번째 부터 에러가 발생하기 시작한다.

WAS를 재기동하면 또 첫번째는 이상없으나, 두번째 부터 에러가 발생한다.


ibatis는 특정 id의 쿼리를 실행 한 후 해당 id의 쿼리를
캐쉬로 보관하고 있다가
동일한 id에 대한 요청시 캐쉬에 저장된 쿼리정보를 토대로 result값을 맵핑 시킨다고 한다.
(ibatis에서 제공하는 CacheModel과는 전혀무관한 얘기임)

이를 해결하기 위해선 remapResults="true" 속성을 추가해 주면 된다.
default remapResults="false" 이기때문에 항상 요청된 id와 동일한게
캐쉬에 저장되어 있다면 캐쉬의 내용으로 맵핑하려 할것이고
에러가 날것이다. 위 속성을 true로 지정하면
캐쉬의 내용을 무시하고 현재의 값을 가지고 맵핑시킴.

즉 아래와 같이 사용하면 된다.
<select id="fileInfo" remapResults="true"  resultClass="java.lang.String" parameterClass="java.util.Map">
    SELECT $columnName$
      FROM $tableName$
    WHERE $pkName$ = #pkValue#
</select>


출처: https://jace.tistory.com/57 [Jace's Blog]

'개발 > DB' 카테고리의 다른 글

MySQL database, data 복사하기  (0) 2020.03.25
Clob 타입을 varchar2 타입으로  (0) 2018.02.14
오라클 REGEXP_LIKE  (0) 2015.12.16
ORA-00054 에러  (0) 2015.11.25
해당 컬럼이 있는 테이블 찾기  (0) 2015.09.14

MySQL database, data 복사하기

개발/DB 2020. 3. 25. 16:43

리눅스 환경에서 실행

 

1. mysqldump명령어로 .sql파일을 만든다.

    #mysqldump -uroot -p [database명] > [파일이름].sql

    ex) #mysqldump -uroot -p tok > /경로/dumpTok.sql

   이렇게 하고 파일 리스트를 확인해보면 dumpTok.sql 파일이 생성 되어있다.

 

리고 ftp나 여러 방법으로 dumpTok.sql파일을 새로운 서버(서버 이전 하고 싶은)에 옮긴다. 위치는 아무데나 상관없다.

 

*특정 테이블의 구조만 dump 하고 싶을 때 (-d 옵션 사용)

# mysqldump –d –u디비사용자명 –p패스워드 데이터베이스명 > 백업할파일명.sql

ex) #mysqldump -d -uroot -p tok table1 table2 table3 > /경로/dumpTok.sql

*특정 테이블만 dump 하고 싶을 때 (데이터 까지 같이 )

# mysqldump  –u디비사용자명 –p패스워드 데이터베이스명 > 백업할파일명.sql

ex) #mysqldump -uroot -p tok table1 table2 table3 > /경로/dumpTok.sql

 

2. 새로운 서버에 접속한다.

mysqladmin -uroot -p create tok  //database 를 생성한다. (같은 기능을 동작하기 위해 이름을 동일하게 했다) 

mysql -uroot -p tok  < dumpTok.sql //tok이란 database에 dumpTok.sql을 실행

 

이렇게 하면 database에 데이터가 들어간 것을 확인할 수 있다.

 

 

'개발 > DB' 카테고리의 다른 글

부적합한 열이름(동적으로 컬럼명 사용할 시 )  (0) 2020.11.30
Clob 타입을 varchar2 타입으로  (0) 2018.02.14
오라클 REGEXP_LIKE  (0) 2015.12.16
ORA-00054 에러  (0) 2015.11.25
해당 컬럼이 있는 테이블 찾기  (0) 2015.09.14

Clob 타입을 varchar2 타입으로

개발/DB 2018. 2. 14. 17:38

Clob 데이터는 다루기가 참 까다롭더라구요.

그래서 아예 SELECT 할때 이 타입을 VARCHAR2 타입으로 변경해서 SELECT를 진행했습니다.

 

SELECT DBMS_LOB.SUBSTR(컬럼명, 4000, 1)

FROM 테이블

 

물론 4000 글자가 넘어가면 잘리는 현상이 있습니다.

 

'개발 > DB' 카테고리의 다른 글

부적합한 열이름(동적으로 컬럼명 사용할 시 )  (0) 2020.11.30
MySQL database, data 복사하기  (0) 2020.03.25
오라클 REGEXP_LIKE  (0) 2015.12.16
ORA-00054 에러  (0) 2015.11.25
해당 컬럼이 있는 테이블 찾기  (0) 2015.09.14

오라클 REGEXP_LIKE

개발/DB 2015. 12. 16. 09:31

오라클에서 여러 개의 단어를 LIKE로 검색하기 위해서는 동적 쿼리를 사용하거나 LIKEOR로 묶어서 사용했다.  

Oracle 10g부터 정규식 함수가 추가 되었으며 그 중에서 REGEXP_LIKE 함수를 사용하여 다중 검색을 쉽게 할 수 있게 되었다.

 

검색할 단어를 파이프(|)로 연결하여 하나의 문자열로 만든 후 사용하면 된다.

 

 

 

SELECT *
   FROM TABLE
 WHERE REGEXP_LIKE(TEXT, 'A | B | C')

'개발 > DB' 카테고리의 다른 글

MySQL database, data 복사하기  (0) 2020.03.25
Clob 타입을 varchar2 타입으로  (0) 2018.02.14
ORA-00054 에러  (0) 2015.11.25
해당 컬럼이 있는 테이블 찾기  (0) 2015.09.14
테이블 정보 조회  (0) 2015.01.16

ORA-00054 에러

개발/DB 2015. 11. 25. 09:39

ORA-00054: resource busy and acquire with NOWAIT specified

 

위와 같은 에러메시지가 출력되면서 해당 DML이나 DDL 명령이 안될때가 있다.

 

증산은 DML문장이나 DDL문장 실행을 하게 되면 그냥 멈춰버리는 증상이다.

 

원인은 Commit이 수행되지 않았을 경우등의 문제로 발생하는 등 원인이 다양하다.

 

어쨋든 이 증상은 해당 테이블이 바쁘게 사용중일 때 나타나는데 일명 LOCK이 걸린것이다.

 

가장 확실한 방법은 DB를 재시작하는 것이다.

 

그러나 사실 필드에서는 말도 안되는 짓이다. 서비스중인 db를 잠깐이라도 내린다는것 자체가 미친짓이라 할 수 있다.

 

허나, test용으로 만든 서버라면 db재시작도 상관없다.

 

결국은 아래와 같이 Lock을 풀어주는게 가장 적당한 방법이다.

 

1. sqlplus 오라클 접속(시스템 계정으로 접속한다. 토드로 이용해도 무관)

#sqlplus / as sysdba

 

2.SQL> select a.sid, a.serial#

            from v$session a, v$lock b, dba_objects c
            where a.sid=b.sid and
            b.id1=c.object_id and
            b.type='TM' and c.object_name='TABLE이름';

 

위 명령어를 입력하면 SID와 SERIAL NUMBER가 출력된다.

LOCK이 걸린 테이블의 SID이다.

 

3. 세션을 죽인다.

SQL> alter system kill session 'SID, SERIAL';

 

 

여기까지는 시스템계정을 알고 있는 사용자에 한해서의 해결책이다.

일반 사용자는 어떻게 할것인가???

간단하게 commit 명령어로 해결될 가능성이 높다. 이 명령어가 수행되고 나면 restore작업은 불가능하다.

SQL>commit

 

 

'개발 > DB' 카테고리의 다른 글

Clob 타입을 varchar2 타입으로  (0) 2018.02.14
오라클 REGEXP_LIKE  (0) 2015.12.16
해당 컬럼이 있는 테이블 찾기  (0) 2015.09.14
테이블 정보 조회  (0) 2015.01.16
오라클 UPDATE SELECT 문  (0) 2014.11.06

해당 컬럼이 있는 테이블 찾기

개발/DB 2015. 9. 14. 18:30

SELECT A.TABLE_NAME FROM COLS A, TAB B WHERE A.COLUMN_NAME = '컬럼이름' GROUP BY TABLE_NAME

'개발 > DB' 카테고리의 다른 글

오라클 REGEXP_LIKE  (0) 2015.12.16
ORA-00054 에러  (0) 2015.11.25
테이블 정보 조회  (0) 2015.01.16
오라클 UPDATE SELECT 문  (0) 2014.11.06
오라클 단일행 함수 정리  (0) 2014.11.05

테이블 정보 조회

개발/DB 2015. 1. 16. 10:23

테이블 내의 컬럼이 뭐가 들어있는지, 속성은 무엇인지 알고 싶을 때 사용하는 쿼리

 

SELECT

    TABLE_NAME,

    COLUMN_NAME,

    DATA_TYPE,

    DATA_LENGTH,

    DATA_PRECISION,

    DATA_SCALE,

    NULLABLE,

    COLUMN_ID,

    DATA_DEFAULT,

    CHAR_LENGTH

FROM

    USER_TAB_COLUMNS

WHERE

    TABLE_NAME = 'SA_MEMBER'

 

'개발 > DB' 카테고리의 다른 글

ORA-00054 에러  (0) 2015.11.25
해당 컬럼이 있는 테이블 찾기  (0) 2015.09.14
오라클 UPDATE SELECT 문  (0) 2014.11.06
오라클 단일행 함수 정리  (0) 2014.11.05
오라클 PARTITION BY  (1) 2014.10.30

오라클 UPDATE SELECT 문

개발/DB 2014. 11. 6. 13:49

UPDATE문을 짜다가

 

UPDATE TABLE1 SET A = (SELECT D FROM TABLE2 WHERE G='AAA'),

B=(SELECT E FROM TABLE2 WHERE G='AAA')

WHERE H='111'

 

이런식으로 작성하다가 이건 너무 비효율적인 방법이라서 찾아봤는데

아래와 같은 방법이 있었다....

 

 

UPDATE TABLE1

SET( A, B, C) = (SELECT D, E, F FROM TABLE2 WHERE G= 'AAA')

WHERE H = '111'

 

매우 간단하죠~?ㅋㅋ

'개발 > DB' 카테고리의 다른 글

해당 컬럼이 있는 테이블 찾기  (0) 2015.09.14
테이블 정보 조회  (0) 2015.01.16
오라클 단일행 함수 정리  (0) 2014.11.05
오라클 PARTITION BY  (1) 2014.10.30
해당 숫자에 몇건이 있는가?  (0) 2014.06.25

오라클 단일행 함수 정리

개발/DB 2014. 11. 5. 18:05
1. 숫자 처리 함수 :  수 값을 인수로 받아서 처리하기 위한 함수다.

ABS  : 인수의 절대값을 반환한다.
select abs(-10) from dual;
 abs(-10)
 10

ACOS : 인수에 대한 역코사인 값을 반환한다.
select acos(0.1) from dual;
 acos(0.1)
 1.47062890563333682288579851218705812354

ASIN : 인수에 대한 역사인 값을 반환한다.
select asin(0.1) from dual;
 asin(0.1)
 0.10016742116155979634552317945269331856

ATAN : 인수에 대한 역탄젠트 값을 반환한다.
select atan(0.1) from dual;
 atan(0.1)
 0.0996686524911620273784461198780206049018

ATAN2 : 인수 n1/n2에 대한 역탄젠트 값을 반환한다.
select atan2(2,5) from dual;
 atan2(2,5)
 0.3805063771123648863035879168104337074528

BITAND : 인수들의 이진비트를 and한 값을 10진수로 반환한다.
select bitand(7,5) from dual;
 bitand(6,5)
 4
6 = 110(2)
5 = 101(2)
and값 = 100(2) = 4

CEIL : 인수의 같거나 큰수중 가장 작은 정수를 반환한다.
select ceil(6.01) from dual;
 ceil(6.01)
 7

COS : 인수에 대한 코사인 값을 출력한다.
select cos(3) from dual;
cos(3)
 -0.98999249660044545727157279473126130238

COSH :인수에 대한 하이퍼 콜릭 코사인 값을 반환한다.
select cosh(3) from dual;
 cosh(3)
 10.06766199577776584195393603511588983682

EXP : 자연대수 e에 인수n제곱한 값을 반환한다.
select Exp(5) from dual;
 Exp(5)
 148.413159102576603421115580040552279624

FLOOR : 인수보다 작거나 같은 정수들 중 가장 큰 값을 반환한다.
select floor(6.5) from dual;
 floor(6.5)
 6

LN : 0보다 큰 인수의 자연로그 값을 반환한다.
LOG : 인수n1 를 밑으로 하는 인수n2 의 로그 값을 반환한다.
MOD : 인수n1을 인수n2로 나눈 나머지 값을 반환한다.
NANVL : 인수n1이 숫자가 아닐경우, 인수n2값을 반환한다. n1이 숫자일 경우 n1을 반환.
POWER : 인수n1에 인수n2 제곱한 값을 반환.
REMAINDER : 
인수n1을 인수n2로 나눈 나머지 값을 반환한다. mod와는 공식이 다르다.
ROUND (number) : 인수n1를 소수점 인수n2 자리까지 반올림한 값을 반환.
SIGN : 인수의 부호를 반환. 값이-1일경우 음수, 0일경우 인수의 값이 0, 1일경우 양수.
SIN :인수에 대한 사인값을 반환
SINH :인수에 대한 하이퍼 볼릭 사인값을 반환
SQRT : 인수의 제곱근을 반환
TAN :인수에 대한 탄젠트 값을 반환
TANH  : 인수에 대한 하이퍼 볼릭 탄젠트 값을 반환
TRUNC (number)  : 인수n1의 인수n2소수점 자리까지 버림을 한다.
WIDTH_BUCKET : 최소값 인수n2, 최대값 인수n3 사이의 숫자를 구간 인수n3을 나누고, 인수n1이 몇번째 구간에 있는지를 반환.
 

 
2.  문자 처리 함수 : 문자(열) 값을 인수로 받아서 처리하기 위한 함수다.
 
CHR : 바이너리값 인수n1에 해당하는 문자를 반환.
CONCAT : 문자열 인수 들을 연결한다.
INITCAP : 문자열의 첫문자를 대문자로 바꾼다
LOWER : 문자열 전부를 소문자로 바꾼다.
LPAD : 인수n1 문자열앞에 인수n3 문자열을 추가한다. 더한 전체 문자열은 인수n2의 숫자만큼이다. 

LTRIM : 문자열 인수n1의 왼쪽 인수n2를 없앤 문자열을 반환.
NLS_INITCAP :조건부 첫문자열을 대문자로 변환
NLS_LOWER : 조건부 대문자를 소문자로 변환
NLSSORT : 조건부 정렬
NLS_UPPER : 조건부 소문자를 대문자로 변환
REGEXP_REPLACE : 지정한 패턴을 가진 문자열을 찾음.
REGEXP_SUBSTR : 문자열을 포함한 
지정한 패턴을 가진 문자열을 찾음.
REPLACE : 문자의 일부를 다른 문자열로 변경
RPAD : 특정한 문자열을 추가(right)해서 문자열 길이를 늘림
RTRIM :
문자열 인수n1의 오른쪽 인수n2를 없앤 문자열을 반환.
SOUNDEX : 영문 발음이 비슷한 그룹의 번호를 반환.
B, F, P, V = 1 C, G, J, K, Q, S, X, Z = 2 D, T = 3 L = 4 M, N = 5 R = 6
이외의 것은 미리 제거.

SUBSTR : 특정위치(인수n1)에서 몇개(인수n2)의 문자를 잘라 반환한다.
TRANSLATE 인수n1 문자열에 포함된 일부의 문자열 n2를 다른 문자열n3으로 변환한다.
TREAT : 인수의 선언된 형을 바꾼다.
TRIM : 조건으로 지정된 문자를 제거한다.
UPPER : 소문자에서 대문자로 변환한다.
 

 
3. 날짜 연산 함수 : 날짜 데이터 타입에 사용하는 함수다.

- 오라클 날짜 함수
ADD_MONTHS : 달수를 증가시킨다.
CURRENT_DATE : 현재 날짜를 반환한다.
CURRENT_TIMESTAMP : 현재 날짜와 시간 정보를 반환한다.
DBTIMEZONE 
 : 데이터베이스 시간대의 값을 반환합니다
EXTRACT (datetime) : 인수의 지정한 시간대를 출력. year,month등등..
FROM_TZ  
TIMESTAMPDBTIMEZONE 의 데이텉 타입을 timestamp with tome zone 타입으로 변환.
LAST_DAY : 지정한 달의 마지막 날짜를 반환.
LOCALTIMESTAMP  
TIMESTAMP의 현재 날짜와 시간을 출력.
MONTHS_BETWEEN : 지정한 두 날짜의 달 차이를 출력.
NEW_TIME : 첫번째시간대에 해당하는 날짜를 두번때 시간대로 변환.
NEXT_DAY : 지정한 날짜로부터 다음오는 지정한 요일이 몇일인지 반환.
NUMTODSINTERVAL 시간을 지정된 숫자로 변환.
NUMTOYMINTERVAL 날짜를 지정된 숫자로 변환.
ROUND (date) 날짜를 지정한 시간대의 첫번째 날을 출력.
SESSIONTIMEZONE : 현재 세션의 시간대를 반환.

SYS_EXTRACT_UTC :
시 간대 오프셋 또는 시간대 지역 이름을 datetime 값에서 UTC를 추출
SYSDATE : 데이터베이스의 날짜를 반환.
SYSTIMESTAMP 데이터베이스의 시간대를 반환.
TO_CHAR (datetime) 현재 시간을 문자열 형태로 반환.
TO_TIMESTAMP 지정한 
TIMESTAMP형태로 날짜와 시간을 변환
TO_TIMESTAMP_TZ 
지정한 TIMESTAMP형태의 날짜와 시간을 timestamp with tome zone 타입으로 변환
TO_DSINTERVAL  시간을 문자열 형태의 지정한 숫자로 변환.
TO_YMINTERVAL  날짜를 
문자열 형태의 지정한 숫자로 변환.
TRUNC (date) : 날짜를 지정한 기준으로 특정시간을 버림.
TZ_OFFSET  : 
문이 실행될 날짜를 기준으로 인수에 해당하는 시간대 오프셋을 반환

4.  형변환 함수 : 각각의 숫자, 문자, 날짜의 데이터 형을 변환해야하는 경우 사용하는 함수다.

- 오라클 변환 함수
 
ASCIISTR : 문자열의 아스키코드를 반환.
BIN_TO_NUM : 숫자의 2진코드로 변환.
CAST : 다른 데이터 형식으로 변환.
CHARTOROWID : 16진수의 바이너리코드를 해당 문자로 변환.
COMPOSE : 유니코드 형식의 코드를 해당 문자로 변환.
CONVERT :
하나의 문자 세트에서 다른 문자열로 변환
DECOMPOSE : 입력된 형태의 문자열을 유니코드에 해당되는 문자로 변환.
HEXTORAW  입력된 16진수의 값을 raw형태로 변환.
NUMTODSINTERVAL 각각 입력된 시간에 지정된 숫자의 차를 반환.
NUMTOYMINTERVAL 
각각 입력된 날짜에 지정된 숫자의 차를 반환.
RAWTOHEX  처리과정을 거치지않은 입력된 데이터를 16진수로 변환.
RAWTONHEX 
처리과정을 거치지않은 입력된 데이터를 16진수에 해당하는 데이터로 변환.
ROWIDTOCHAR : 
ROWID값을 18자 크기의 varchar2형으로 변환.
ROWIDTONCHAR 
ROWID값을 18자 크기의 nvarchar2형으로 변환. 
SCN_TO_TIMESTAMP : scn을 timestamp로 변환.
TIMESTAMP_TO_SCN  : 
timestamp을 scn로 변환.
TO_BINARY_DOUBLE : 인수를 더블 형태의 부동소수점 데이터형으로 변환.
TO_BINARY_FLOAT : 
인수를 플롯 형태의 부동소수점 데이터형으로 변환.
TO_CHAR (character) : 문자열 형식(
NCHAR , NVARCHAR2 , CLOB ,NCLOB)을 항상 varchar2 형태의 데이터로 변환.
TO_CHAR (datetime) : 
TIMESTAMP , TIMESTAMP WITH TIME ZONE , TIMESTAMP WITH LOCAL TIME ZONE의 데이터 형식을 varchar2 형식으로 변환.
TO_CHAR (number) : number, float, double 형식의 데이터를 varchar2 형식으로 변환.
TO_CLOB : lob칼럼의 nclob 혹은 다른 문자 스트링을 clob으로 구하는 함수.
TO_DATE : char, varchar2, ncar, nvarchar2 데이터 형을 date데이터 형식으로 변환.
TO_DSINTERVAL : 
char, varchar2, ncar, nvarchar2 데이터 형을 interval day to second 데이터 형으로 변환.
TO_LOB : long, log raw 컬럼의 데이터를 lob형싱 데이터로 변환.
TO_MULTI_BYTE :single 바이트 문자를 포함한 모든 문자열을 다중바이트 문자열로 변환.
TO_NCHAR (character) : 문자 스트링, clob, nclob 형식 데이타를 nchar형태의 데이터로 변환.
TO_NCHAR (datetime) : 모든 시간 데이터를 nchar형태의 데이터로 변환.
TO_NCHAR (number) : 모든 숫자 형식 데이터를 nchar형태의 데이터로 변환.
TO_NCLOB : 
lob칼럼의 clob 혹은 다른 문자 스트링을 nclob으로 구하는 함수.
TO_NUMBER : 숫자를 포함하는 문자열 데이터를 숫자형식의 데이터로 변환.
TO_SINGLE_BYTE : 다중 바이트 문자열을 single 문자데이터로 변환.
TO_TIMESTAMP : 
 char, varchar2, ncar, nvarchar2 형식 데이터를 timestamp 형식 데이터로 변환.
TO_TIMESTAMP_TZ : 
char, varchar2, ncar, nvarchar2 형식 데이터를 timestamp time zone형식 데이터로 변환.
TO_YMINTERVAL 
char, varchar2, ncar, nvarchar2 형식 데이터를 interval year to month 형식 데이터로 변환.
TRANSLATE ... USING : 문자열을 지정한 문자형식 코드로 변환.
UNISTR : 문자열을 nchar 형식으로 변환.

'개발 > DB' 카테고리의 다른 글

테이블 정보 조회  (0) 2015.01.16
오라클 UPDATE SELECT 문  (0) 2014.11.06
오라클 PARTITION BY  (1) 2014.10.30
해당 숫자에 몇건이 있는가?  (0) 2014.06.25
해당월의 마지막 날짜 구하는 쿼리  (0) 2014.05.13

오라클 PARTITION BY

개발/DB 2014. 10. 30. 14:48

데이터를 SELECT 하는 도중 동일 데이터에 대해서 몇개를 가지고 있는지 알고 싶었다.

예를 들면 우리가족이 몇명인지 알고 싶을때,

먼저 가족코드 라는 것을 '777'로 우리 가족 3명에게 모두 주었다.

SELECT COUNT(가족코드) OVER (PARTITION BY 가족코드) AS TEL_LINE FROM 가족

이런식으로 코딩을 하면 동일 가족코드에 데이터가 몇개있는지 COUNT를 세서 알 수 있다.

 

'개발 > DB' 카테고리의 다른 글

오라클 UPDATE SELECT 문  (0) 2014.11.06
오라클 단일행 함수 정리  (0) 2014.11.05
해당 숫자에 몇건이 있는가?  (0) 2014.06.25
해당월의 마지막 날짜 구하는 쿼리  (0) 2014.05.13
TABLESPACE, TRUCATE  (0) 2014.04.07