* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
|
Linux 64bit |
|
9.2.9.0002 |
|
[도움말]-[버전정보] 확인 |
|
java, php, odbc 등 입력 |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
1. 테이블 생성후
<Class Name>
test_blob
<Attributes>
bid INTEGER
file_content BLOB
file_name CHARACTER VARYING(10)
2. 명령어를 실행해서 최종적으로 데이터를 .csv로 뽑아내면서 file_content 컬럼은 경로정보를 얻고자 합니다.
csql -u dba -p dba demodb@localhost -c "SELECT CONCAT(bid,',',file_content,',',file_name) FROM (select bid,file_content,file_name from test_blob) A"
-o data.csv
3. 하지만 에러가 아래와 같이 나면서 실행이 되지 않습니다.
ERROR: Cannot coerce A.file_content to type varchar.
blob 타입을 문자열함수로 CONCAT해서 그런거 같은데 blob의 경로를 문자열로 뽑아낼수 있는 방법이 있나요?
BLOB 타입을 문자열(varchar,char) 타입으로 변환이 불가능 합니다.
* 온라인 매뉴얼의 "명시적인 타입 변환 정리 표" 참조 : https://www.cubrid.org/manual/ko/9.3.0/sql/function/typecast_fn.html?highlight=cast#id1
따라서, 우회 방법으로 data.csv 파일을 리눅스 sed 명령어로 가공하면 원하는 결과를 추출 할 수 있습니다.
예제) sed 명령어로 가공 방법
1. 쿼리 수행
$ csql -u dba demodb -c "select col1, col2, col3 from test02" -o data.csv
2. 원본
$ cat data.csv
=== <Result of SELECT Command in Line 1> ===
col1 col2 col3
=========================================================
1 file:/data/DB/gm_newdb/ces_190/test02.00001680741708877843_1688 'cccddd'
2 file:/data/DB/gm_newdb/ces_158/test02.00001680743119123415_1027 'ccc2ddd2'
2 rows selected. (0.000493 sec) Committed.
3. data.scv 파일 가공
$ cat data.csv | sed -n "/file/p" | sed -e "s/'//g" | sed -e "s/^ */'/g" -e "s/ *$/'/g" | sed -e "s/ /,/g" > data_process.csv
- 1 번 째 파이프 : file 이라는 단어가 포함된 라인 만 출력
- 2 번 째 파이프 : '(작은 따옴표) 문자가 포함된 단어 제거
- 3 번 째 파이프 : 모든 문자열의 앞,뒤에 '(작은 따옴표) 문자 추가
- 4 번 째 파이프 : 모든 문자열의 공백 2개를 ,(쉼표)문자로 변환
4. 가공 결과
$ cat data_process.csv
'1,file:/data/DB/gm_newdb/ces_190/test02.00001680741708877843_1688,cccddd'
'2,file:/data/DB/gm_newdb/ces_158/test02.00001680743119123415_1027,ccc2ddd2'