programing

Oracle 데이터베이스:BLOB 읽는 법?

css3 2023. 7. 29. 08:47

Oracle 데이터베이스:BLOB 읽는 법?

오라클 데이터베이스로 작업 중인데, BLOB의 내용을 읽고 싶습니다.이거 어떻게 하는 거지?

단순 선택 문을 실행하면 "(BLOB)"(따옴표 없이)만 반환됩니다.실제 내용은 어떻게 읽습니까?

다음을 사용하여 값을 16진수로 덤프할 수 있습니다.UTL_RAW.CAST_TO_RAW(UTL_RAW.CAST_TO_VARCHAR2()).

SELECT b FROM foo;
-- (BLOB)

SELECT UTL_RAW.CAST_TO_RAW(UTL_RAW.CAST_TO_VARCHAR2(b))
FROM foo;
-- 1F8B080087CDC1520003F348CDC9C9D75128CF2FCA49D1E30200D7BBCDFC0E000000

이는 BLOB 열에 삽입하는 데 사용되는 형식과 동일하므로 편리합니다.

CREATE GLOBAL TEMPORARY TABLE foo (
    b BLOB);
INSERT INTO foo VALUES ('1f8b080087cdc1520003f348cdc9c9d75128cf2fca49d1e30200d7bbcdfc0e000000');

DESC foo;
-- Name Null Type 
-- ---- ---- ---- 
-- B        BLOB 

그러나 특정 시점(2000바이트?)에서는해당하는 16진수 문자열이 Oracle의 최대 문자열 길이를 초과합니다.이 경우를 처리해야 하는 경우에는 Oracle SQL의 BLOB에서 텍스트 콘텐츠를 가져오는 방법설명서와 결합하여 BLOB의 하위 문자열을 확인할 수 있는 보다 복잡한 접근 방식을 제공해야 합니다.

SQL Developer는 BLOB를 이미지로 표시할 수 있습니다(최소한 jpegs에서는 작동함).데이터 보기에서 BLOB 필드를 두 번 클릭하여 "연필" 아이콘을 표시합니다.연필을 클릭하면 "이미지로 보기" 확인란을 선택할 수 있는 대화상자가 나타납니다.

내용이 너무 크지 않은 경우에는 다음을 사용할 수 있습니다.

SELECT CAST ( <blobfield> AS RAW( <maxFieldLength> ) ) FROM <table>;

또는

SELECT DUMP ( CAST ( <blobfield> AS RAW( <maxFieldLength> ) ) ) FROM <table>;

HEX 값이 표시됩니다.

마이크로소프트 드라이버가 아닌 오라클 네이티브 데이터 공급자를 사용하는 경우 모든 필드 유형을 얻을 수 있습니다.

Dim cn As New Oracle.DataAccess.Client.OracleConnection
Dim cm As New Oracle.DataAccess.Client.OracleCommand
Dim dr As Oracle.DataAccess.Client.OracleDataReader

연결 문자열에는 공급자 값이 필요하지 않으므로 다음과 같은 방법을 사용합니다.

"Data Source=myOracle;UserID=Me;Password=secret"

연결을 엽니다.

cn.ConnectionString = "Data Source=myOracle;UserID=Me;Password=secret"
cn.Open()

명령을 첨부하고 Sql 문을 설정합니다.

cm.Connection = cn
cm.CommandText = strCommand

가져오기 크기를 설정합니다.바샤르 정도 크기 때문에 4000을 사용합니다.

cm.InitialLONGFetchSize = 4000

판독기를 시작하고 레코드/열을 순환합니다.

dr = cm.ExecuteReader

Do while dr.read()
    strMyLongString = dr(i)
Loop

읽기를 더 구체적으로 지정할 수 있습니다(예: 박사).Oracle String(i) dr을 가져옵니다.열에서 데이터 유형을 먼저 식별하는 경우 OracleClob(i) 등을 가져옵니다.긴 데이터 유형을 읽는 경우 간단한dr(i)또는dr.GetOracleString(i)잘 작동합니다.중요한 것은 이니셜을 확인하는 것입니다.LONGFetchSize가 데이터 유형에 충분히 큽니다.또한 기본 드라이버는 지원하지 않습니다.CommandBehavior.SequentialAccessLONG 필드가 선택 문의 마지막 필드일 필요도 없고 데이터 판독기에 필요한 필드도 없습니다.

어떤 고객을 사용하십니까?넷, 자바, 루비, SQLPLUS, SQL DEPLOVERS?당신은 그 간단한 선택 성명서를 어디에 썼습니까?

그리고 왜 블롭의 내용을 읽으려고 합니까? 블롭은 이진 데이터를 포함하므로 데이터를 읽을 수 없습니다.이진 콘텐츠 대신 텍스트를 저장하려면 블롭 대신 클럽을 사용해야 합니다.

SQL DEPLOVERS: http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html 를 다운로드하는 것을 제안합니다.SQL Developer를 사용하여 내용을 확인할 수 있습니다.

이 신트텍스를부얻하경는우고자분일반에서 평문 부분,BLOBCTX_DOC 패키지를 사용할 수 있습니다.

를 들면, 를들어예,,CTX_DOC.FILTER프로시저는 "일반 텍스트 또는 HTML 버전의 문서"를 생성할 수 있습니다.알아두시기 바랍니다.CTX_DOC.FILTER합니다.BLOB기둥.만약 당신이 그것을 원하지 않는다면, 당신은 사용할 수 있습니다.CTX_DOC.POLICY_FILTER대신 인덱스가 필요 없는 절차입니다.

언급URL : https://stackoverflow.com/questions/5682387/oracle-database-how-to-read-a-blob