Skip to content
Advertisement

How can I read a very long BLOB column in Oracle?

I want to connect a Node Express API with an Oracle 11g Database which has a table with a BLOB column. I want to read it using a SQL query, but the problem is that the BLOB column can have a very long text, more than 100k characters. How can i do this?

I tried using: select utl_raw.cast_to_varchar2(dbms_lob.substr(COLUMN_NAME)) from TABLE_NAME. But it returns ‘raw variable length too long’.

I can make multiple queries in a loop and then join them if it was necessary, but I haven’t found how bring just a part of the blob.

Advertisement

Answer

Use the node-oracledb module to access Oracle Database (which you are probably already doing, but don’t mention).

By default, node-oracledb will return LOBs as Lob instances that you can stream from. Alternatively you can fetch the data directly as a String or Buffer, which is useful for ‘small’ LOBs. For 100K, I would just get the data as a Buffer, which you can do by setting:

oracledb.fetchAsBuffer = [ oracledb.BLOB ];

Review the Working with CLOB, NCLOB and BLOB Data documentation, and examples like blobhttp.js and the other lob*.js files in the examples directory.

You may also want to look at https://jsao.io/2018/03/creating-a-rest-api-with-node-js-and-oracle-database/ which shows Express and node-oracledb.

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement