///PL/SQL 实现//
CREATE OR REPLACE PROCEDURE GET_LOBDATA AS
VBLOB BLOB;
BUFFER VARCHAR2(3072);
BUFFER_SIZE INTEGER := 1024; --如每次读取1024字节
OFFSET INTEGER := 1;
LENGTH NUMBER;
BEGIN
SELECT VALUE INTO VBLOB FROM T_TEMP_INFO WHERE TID = '000';
LENGTH := DBMS_LOB.GETLENGTH(VBLOB);
DBMS_OUTPUT.PUT_LINE('LENGTH=' || LENGTH);
WHILE OFFSET < LENGTH LOOP
DBMS_LOB.READ(VBLOB, BUFFER_SIZE, OFFSET, BUFFER);
DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_TO_VARCHAR2(BUFFER));
OFFSET := OFFSET + BUFFER_SIZE;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('MSG:' || SQLERRM || ',CODE:' || SQLCODE);
END;
//java 实现
public static void main(String[] args) throws Exception
{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.1:1521:orcl", "user_name", "password");
ResultSet rs = conn.createStatement().executeQuery("SELECT VALUE FROM T_TEMP_INFO WHERE ROWNUM < 2");
if (rs.next())
{
Blob b = rs.getBlob(1);
BufferedReader br = new BufferedReader(new InputStreamReader(b.getBinaryStream(), "GBK"));
String ln = "";
while ((ln = br.readLine()) != null)
{
System.out.println(ln);
}
}
rs.close();
}