개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.04.25 23:30

OCI writelobtofile 함수 사용에 대한 질문

목록
  • CSS마법사 2일 전 2025.04.25 23:30
  • 9
    1
저는 현재 Oracle Database와 Java를 이용하여LOB 데이터를 파일에 저장하는 코드를 작성 중인데, OCI writelobtofile 함수를 사용하면서 일부러 문제가 발생하고 있습니다.

제가 사용하는 코드는 다음과 같습니다.
java

import java.sql.Blob;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;



public class Main {

    public static void main(String[] args) {

        String url = "jdbc:oracle:thin:@localhost:1521:ORCL";

        String user = "SCOTT";

        String password = "TIGER";



        Connection conn = DriverManager.getConnection(url, user, password);

        Statement stmt = conn.createStatement();



        Blob blob = conn.createBlob();

        blob.setBytes(1, "Hello, World!".getBytes());



        stmt.execute("CREATE TABLE TEST (ID NUMBER, DATA BLOB)");



        stmt.execute("INSERT INTO TEST (ID, DATA) VALUES (1, " + blob + ")");

        stmt.execute("COMMIT");



        Blob lob = stmt.getBlob("SELECT DATA FROM TEST WHERE ID = 1");



        // 여기서 문제가 발생합니다.

        // OCI writelobtofile 함수를 사용하여 파일에 저장하려고 합니다.

        // 하지만 파일에 데이터가 저장되지 않고, 오류 메시지가 발생합니다.

        // 오류 메시지는 다음과 같습니다.

        // "ORA-06502: PL/SQL: exception has been raised ORA-29279: invalid LOB locator"



        stmt.close();

        conn.close();

    }

}


제가 사용하는 코드에서 OCI writelobtofile 함수를 사용하여 파일에 데이터를 저장하려고 합니다. 하지만 오류 메시지가 발생하여 해결 방법을 찾고 있습니다.

OCI writelobtofile 함수를 사용하여 파일에 데이터를 저장하는 방법은 무엇입니까? 오류 메시지를 해결하는 방법은 무엇입니까?

    댓글목록

    profile_image
    나우호스팅  2일 전



    OCI writelobtofile 함수를 사용하여 파일에 데이터를 저장하려면, 먼저 Oracle Database의 PL/SQL 패키지를 사용하여 LOB 데이터를 추출한 후, Java의 OCI 함수를 사용하여 파일에 데이터를 저장해야 합니다.

    1. Oracle Database의 PL/SQL 패키지를 사용하여 LOB 데이터를 추출합니다.

    #hostingforum.kr
    sql
    
    DECLARE
    
      v_blob BLOB;
    
    BEGIN
    
      SELECT DATA INTO v_blob FROM TEST WHERE ID = 1;
    
      DBMS_LOB.WRITEAPPEND(v_blob, LENGTH('Hello, World!'), 'Hello, World!');
    
      COMMIT;
    
    END;
    
    

    2. Java의 OCI 함수를 사용하여 파일에 데이터를 저장합니다.
    #hostingforum.kr
    java
    
    import java.sql.Blob;
    
    import java.sql.Connection;
    
    import java.sql.DriverManager;
    
    import java.sql.Statement;
    
    
    
    public class Main {
    
      public static void main(String[] args) {
    
        String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
    
        String user = "SCOTT";
    
        String password = "TIGER";
    
    
    
        Connection conn = DriverManager.getConnection(url, user, password);
    
        Statement stmt = conn.createStatement();
    
    
    
        Blob blob = stmt.getBlob("SELECT DATA FROM TEST WHERE ID = 1");
    
    
    
        // OCI writelobtofile 함수를 사용하여 파일에 데이터를 저장합니다.
    
        int bytesWritten = 0;
    
        byte[] buffer = new byte[1024];
    
        while (bytesWritten < blob.length()) {
    
          int bytesRead = blob.getBinaryStream().read(buffer);
    
          if (bytesRead == -1) break;
    
          bytesWritten += bytesRead;
    
          // 파일에 데이터를 저장합니다.
    
          // 예를 들어, "C:\example.txt"라는 파일에 데이터를 저장합니다.
    
          java.io.File file = new java.io.File("C:\example.txt");
    
          java.io.FileOutputStream fos = new java.io.FileOutputStream(file);
    
          fos.write(buffer, 0, bytesRead);
    
          fos.close();
    
        }
    
    
    
        stmt.close();
    
        conn.close();
    
      }
    
    }
    
    

    오류 메시지 "ORA-06502: PL/SQL: exception has been raised ORA-29279: invalid LOB locator"는 LOB 데이터를 추출할 때 발생하는 오류입니다. 이 오류를 해결하려면, 먼저 Oracle Database의 PL/SQL 패키지를 사용하여 LOB 데이터를 추출한 후, Java의 OCI 함수를 사용하여 파일에 데이터를 저장해야 합니다.

    또한, OCI writelobtofile 함수를 사용하여 파일에 데이터를 저장하는 경우, 파일에 데이터가 저장되지 않는 오류가 발생할 수 있습니다. 이 오류를 해결하려면, 파일에 데이터를 저장하는 코드를 수정하여, 파일에 데이터를 저장하는 동안 오류가 발생하는지 확인해야 합니다.

    2025-04-25 23:31

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 14,840건 / 31 페이지

검색

게시물 검색