NPM Oracle: вставка больших двоичных объектов

Я пытаюсь использовать библиотеку оракула NPM и обновить некоторые таблицы значениями BLOB, созданными из файлов на моем компьютере. В документации Oracle говорится, что для получения значения, которое примет база данных, используйте функцию createLob(), как показано ниже:

conn.createLob(oracledb.BLOB, function(err, templob) {
if (err) { . . . }
// ... else use templob
});

Но я понятия не имею, что означает "использовать templob"...

Как передать данные в эти объекты oracledb.BLOB?

Обновлено: пример обновления, которое я пытаюсь:

const queryString = `UPDATE TABLENAME SET BLOB = :blob WHERE ID = 1234;`;
                this.oracleConnection.execute(queryString, 
                    {blob: await fs.readFileSync('/path/to/image.jpg')}
                )

Не могли бы вы предоставить более подробную информацию о том, что вы делаете? Откуда берутся BLOB-объекты (файлы на сервере, веб-сервере и т. д.)? Насколько велики BLOB?

Dan McGhan 24.06.2019 18:52

Файлы с моего компьютера, как указано. Файлы имеют переменный размер, но на данный момент все они должны быть меньше 1 МБ.

BGrossman 24.06.2019 18:58
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
1 400
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Исходя из вашего варианта использования (небольшие файлы и ограниченный параллелизм), я думаю, что буферные API будут лучшим выбором, поскольку они очень просты. Из документ:

Учитывая таблицу:

CREATE TABLE mylobs (id NUMBER, c CLOB, b BLOB);

пример INSERT:

var fs = require('fs');
var str = fs.readFileSync('example.txt', 'utf8');
. . .

conn.execute(
  `INSERT INTO mylobs (id, myclobcol) VALUES (:idbv, :cbv)`,
  { idbv: 1,
    cbv: str },  // type and direction are optional for IN binds
  function(err, result) {
    if (err)
      console.error(err.message);
    else
      console.info('CLOB inserted from example.txt');
. . .

Кроме того, на случай, если вам это когда-нибудь понадобится, я завершаю мини-сериал по этой теме, но он больше посвящен загрузкам на веб-сервер: https://jsao.io/2019/06/uploading-and-downloading-files-with-node-js-and-oracle-database/

Это все еще дает мне ошибку недопустимого символа по смещению, которое находится внутри буфера. Имеет ли значение, что столбец, который я обновляю, является BLOB, а не CLOB?

BGrossman 24.06.2019 20:26

Обновленный пост с примером

BGrossman 24.06.2019 20:38

Неважно, CLOB это или BLOB, драйвер поддерживает оба. Не могли бы вы указать точную ошибку, которую вы получаете? Как правило, такие вещи всегда легче решить с помощью воспроизводимого тестового примера. Кроме того, вам не нужно ждать вызова readFileSync, поскольку это метод синхронизации.

Dan McGhan 24.06.2019 20:44

[Ошибка: ORA-00911: недопустимый символ] errorNum: 911, смещение: 64

BGrossman 24.06.2019 20:49

Примечание: в моей строке 64-е смещение — это точка с запятой.

BGrossman 24.06.2019 20:50

Ах, с операторами SQL вы не ставите точку с запятой в конце. Просто удалите его и повторите попытку.

Dan McGhan 24.06.2019 20:51

Другие вопросы по теме