sql >> データベース >  >> RDS >> Oracle

OracleからSQLServerへの画像の挿入

    この例では、mssqllink は、DG4ODBCとEasysoftのSQLServerODBCドライバーを使用してSQLServerに接続するデータベースリンクの名前です。

    CREATE DIRECTORY IMAGE AS '/tmp';
    
    DECLARE
      curid NUMBER;
      execid NUMBER;
      src_file BFILE:=NULL;
      dst_file BLOB;
      lgh_file BINARY_INTEGER;
      file_status boolean:=false;
      amt BINARY_INTEGER := 2000; -- The maximum image size for this example is 2K.
      buf RAW(2000);
      bound_raw long raw;
      pos INTEGER := 1;
    
    BEGIN
    src_file := BFILENAME('IMAGE', 'test.jpg');
    file_status := dbms_lob.fileexists( src_file )=1;
    
    if file_status then
    
      -- open the file
      dbms_lob.createtemporary(dst_file, true, dbms_lob.call);
      dbms_lob.fileopen (src_file);
    
      -- determine length
      lgh_file := dbms_lob.getlength (src_file);
      dbms_output.put_line('Size : ' || lgh_file);
      if lgh_file<2001 then
          -- Read the file
          -- dbms_lob.loadfromfile(dst_file, src_file, lgh_file);
          Begin
            LOOP
              dbms_output.put_line('Pos : ' || pos);
              dbms_lob.read(src_file, amt, pos, buf);
              bound_raw :=bound_raw || buf;
              -- Process contents of buffer
              pos := pos + amt;
            END LOOP;
            EXCEPTION
                WHEN NO_DATA_FOUND
                THEN
                    BEGIN
                        dbms_output.put_line('End of data reached');
                        dbms_lob.fileclose(src_file);
                    END;
          -- Insert the blob field
          end;
          dbms_output.put_line('Buffer : ' || buf);
          curid := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@mssqllink; -- Replace this with the name of your linked table
          DBMS_HS_PASSTHROUGH.PARSE@mssqllink(curid,'insert into blb values (1,?)'); -- Destination table in SQL Server
          DBMS_HS_PASSTHROUGH.BIND_VARIABLE_RAW@mssqllink(curid, 1, buf );
    
          execid := DBMS_HS_PASSTHROUGH.EXECUTE_NON_QUERY@mssqllink(curid);
          DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@mssqllink(curid);
    
          commit;
          dbms_output.put_line('Data sent to Easysoft SQL Server ODBC driver');
        else
            dbms_output.put_line('File size is too big for Oracle');
        end if;
    else
      dbms_output.put_line('Can not open file.');
    end if;
    
    END;
    /

    1. MySQLでヒストグラムを作成する方法は?

    2. 単純なPostgresqlステートメント-列名が存在しません

    3. エラー:TCPプロバイダー:エラーコード0x2746。ターミナルを介したLinuxでのSQLセットアップ中

    4. パッチはどこにありますか?