Skip to content

Instantly share code, notes, and snippets.

@Eihen
Last active November 4, 2019 14:56
Show Gist options
  • Save Eihen/6c4b7a443384eaf8b34496f9c22b9336 to your computer and use it in GitHub Desktop.
Save Eihen/6c4b7a443384eaf8b34496f9c22b9336 to your computer and use it in GitHub Desktop.
#!/usr/bin/env node
const fs = require('fs');
let table = process.argv[2];
let coluna = process.argv[3];
let idColumn = process.argv[4];
let id = process.argv[5];
let buffer = fs.readFileSync(process.argv[6]);
let parts = buffer.toString().match(/[\s\S]{1,2000}/g);
let clobText = parts.map(p => "TO_CLOB('" + p.replace(/'/g, "''").replace(/&/g, "' || chr(38) || '") + "')").join(" || ");
let writer = fs.createWriteStream(process.argv[7]);
writer.write("DECLARE\n");
writer.write(" c clob;\n");
writer.write(" b blob;\n");
writer.write(" amount INTEGER := DBMS_LOB.lobmaxsize;\n");
writer.write(" dest_offset INTEGER := 1;\n");
writer.write(" src_offset INTEGER := 1;\n");
writer.write(" blob_csid INTEGER := nls_charset_id('UTF8');\n");
writer.write(" lang_context INTEGER := DBMS_LOB.default_lang_ctx;\n");
writer.write(" warning INTEGER := 0;\n");
writer.write("BEGIN\n");
writer.write("\n");
writer.write("dbms_lob.createtemporary(b, TRUE);\n");
writer.write("c := " + clobText + ";\n");
writer.write("DBMS_LOB.ConvertToBlob(b, c, amount, dest_offset, src_offset, blob_csid, lang_context, warning);\n");
writer.write(" UPDATE " + table + "\n");
writer.write(" SET " + coluna + " = b \n");
writer.write(" WHERE " + idColumn + " = '" + id + "';\n")
writer.write("END;");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment