2009-09-18 2 views

답변

7

데이터가 BYTE 또는 BLOB 필드에 저장되어 있습니까? 데이터가 BLOB 컬럼에 저장되어있는 경우

, 당신은 사용할 수 있습니다 : 데이터가 BYTE 컬럼에 저장되어

SELECT LOTOFILE(blob_column, '/path/to/file/on/client', 'client') 
    FROM TheTable 
WHERE PK_Column = 23411 -- PK value 

경우에, 당신은 오히려 더 열심히 일해야한다. 컴퓨터에 ESQL/C (ClientSDK) 및 C 컴파일러가있는 경우 IIUG Software Archive에서 SQLCMD를 구하고 소프트웨어를 추출하는 것이 좋습니다. Informix 환경 세트가 필요하고 C 프로그램을 컴파일 할 수 있어야합니다. 그런 다음 실행하십시오 :

./configure --prefix=$HOME/bin 

접두어로 지정하는 것은별로 중요하지 않습니다. 구성 스크립트 만 실행하면됩니다.

그런 다음 모든 내용을 컴파일하거나 (make) selblob (make selblob)의 프로그램을 컴파일 할 수 있습니다. 그 프로그램은 제가 '비 네트 (vignette)'라고 부르는 것입니다. 디스크에 BYTE blob을 선택하는 방법을 보여주는 미세한 프로그램. 그러나 이것은 또한 완전한 기능을합니다. 그것은 당신이 그것에 던지거나 오류를 진단하는 것과 관련이 있습니다. 데이터베이스가 precious 호출되면

, 바이트의 데이터가 테이블 byte_table에 데이터를 보관하는 컬럼은 byte_column이며, 기본 키 열은 col1입니다 (필요한 값이 23이다)과 col2 (그리고 값이 필요합니다) "Habeas Corpus"입니다, 당신은 실행할 수 있습니다

selblob -d precious -t byte_table -k col1=23 -k col2="Habeas Corpus" \ 
     -c byte_column -f output_file 

이 명명 된 파일에 바이트 값을 언로드합니다.

ESQL/C 또는 C 컴파일러가 없거나이를 사용하기위한 권한이 없으면 수명이 더 많이 걸립니다. 가장 가까운 접근 방식은 DB-Access에서 UNLOAD 문을 사용하는 것입니다

dbaccess precious - <<! 
unload to "output_file" 
select byte_column from byte_table where col1 = 23 and col2 = 'Habeas Corpus'; 
! 

이것은 바이트 값의 진수 덤프 (문자 당 2 바이트)를 포함하는 파일을 생성합니다. 그런 다음 16 진수를 일반 데이터로 변환하기 위해 파일을 사후 처리해야합니다. 열이 BYTE 열 대신 TEXT 열인 경우 변환이 필요하지 않습니다. 당신은 변환을 수행하는 매우 간단한 펄 스크립트를 사용할 수 있습니다 (파일이 충분히 작은 메모리로 slurped 될 것입니다 제공 - 충분히 작은하지 않은 경우 당신은 더 열심히 일해야) :

perl -w -e ' 
    $/ = ""; 
    my $data = <>; 
    while (length($data) > 1) 
    { 
     my $hex = substr($data, 0, 2); 
     printf "%c", hex($hex); 
     $data = substr($data, 2); 
    }' <output_file 

길이 조건을 지정합니다 ' > 1 '을 사용하여 언로드 된 데이터의 끝에서 개행을 처리합니다.

('히스테리 컬 건포도', 일명 '역사적인 이유'의 경우, IDS 9.00에서 '스마트 한 얼룩'을위한 명시 적 이름 인 BLOB 및 CLOB가 도입되었지만 BYTE와 TEXT의 'BLOB 유형' 대략적으로 대응하는 기능을 가진 데이터 유형의 경우 - 내 책에는 모두 BLOB (소문자) 유형입니다. BLOB 및 CLOB 얼룩이 발생하기까지 6 년 또는 그 이상인 1990 년 BYTE 및 TEXT BLOB에 대해 알게 된 노인들과의 문제입니다. 덧붙였다. 어쨌든 이전 스타일의 얼룩에 대한 좋은 대체 공식 용어는 없습니다.) '멍청한 얼룩 (bumb blobs)'을 사용하는 것은 정치적으로 정확하지 않습니다!)

+0

당신은 제정신이 아닙니다 ... 나는이 대답을 필요로하고 물론 그 대답이 필요합니다. informix와 관련하여 – CheeseConQueso

+0

LOTOFILE은 적어도 Informix 12.10에서는 BYTE 컬럼에서도 작동합니다. 모든 유용한 Informix 게시물을 보내 주셔서 감사합니다. Informix에서 뭔가를 검색 할 때마다 이름이 나타납니다. :) – Otherside

0

데이터베이스를 쿼리하고 blob을 디스크에 저장하는 작은 프로그램을 작성해야합니다. 대부분의 데이터베이스에는 "디스크에 파일 열기"라는 개념이 없습니다.

+1

나는 MySQL에 익숙하다고 생각합니다. – levhita

관련 문제