문제

Binary Blob Field (JPG)로 Informix 데이터베이스에 이미지가 있는데 SQL을 사용하여 디스크에 이미지를 어떻게 작성할 수 있습니까?

도움이 되었습니까?

해결책

데이터가 바이트 또는 블로브 필드에 저장되어 있습니까?

데이터가 Blob 열에 저장되면 다음을 사용할 수 있습니다.

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

데이터가 바이트 열에 저장되면 더 열심히 일해야합니다. 컴퓨터에 ESQL/C (ClientsDK)와 C 컴파일러가있는 경우 SQLCMD를 IIUG 소프트웨어 아카이브 소프트웨어 추출. Informix 환경 세트가 필요하며 C 프로그램을 컴파일 할 수 있어야합니다. 그런 다음 실행 :

./configure --prefix=$HOME/bin

접두사로 지정하는 내용은 중요하지 않습니다. 구성 스크립트를 실행하면됩니다.

그런 다음 모든 것을 컴파일 할 수 있습니다 (make) 또는 단순히 프로그램을 컴파일 할 수 있습니다 selblob (make selblob). 그 프로그램은 내가 'vignette'라고 부르는 것입니다. 바이트 블로브를 디스크로 선택하는 방법을 보여주는 현미경 프로그램. 그러나 그것은 또한 완전히 기능적이다. 그것은 당신이 던지는 거의 모든 것과 함께 작동하거나 오류를 진단합니다.

데이터베이스가 호출되는 경우 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에서 언로드 명령문을 사용하는 것입니다.

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

이렇게하면 바이트 값 (문자 당 2 바이트)의 육각형 덤프가 포함 된 파일이 생성됩니다. 그런 다음 16 진수를 일반 데이터로 변환하려면 파일을 후 처리해야합니다. 열이 바이트 열 대신 텍스트 열인 경우 변환이 필요하지 않습니다. 상당히 간단한 PERL 스크립트를 사용하여 변환을 수행 할 수 있습니다 (파일이 메모리에 빠질 정도로 작아서 작은 경우에는 충분히 작지 않으면 더 열심히 일해야합니다).

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'언로드 된 데이터의 끝에서 Newline을 다루기 위해.

( 'Hysterical Raisins', 일명 '역사적 이유'의 경우, ID 9.00이 약간 다른 데이터 유형 인 'Smart Blob'에 대한 명시 적 이름 Blob 및 Clob을 소개했지만 여전히 바이트와 텍스트를 '블로브 유형'이라고 부릅니다. 대략적으로 대응하는 기능 - 내 책에서 그들은 모두 blob (하위 사례) 유형입니다. 그것은 1990 년에 바이트와 텍스트 블로브에 대해 배운 노인들에게는 문제입니다. 사례, 오래된 스타일의 블로브에 대한 대체 공식 용어는 없습니다. '멍청한 블로브'를 사용하는 것은 정치적으로 정확하지 않습니다!)

다른 팁

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top