Переменная связывания node-oracledb со значением NULL
Используя пакет node-oracledb с node.js, я пытаюсь удалить строку в моей базе данных oracle, в которой есть нулевое значение. Мне нужно иметь возможность передать нулевое значение в качестве переменной связывания, но он выдает ошибку:
var query = "delete from table where event IS :event";
var bind_vars = [null];
connection.execute(query, bind_vars, { autoCommit: true }, function(error, results) {});
Возвращенная ошибка
{Ошибка: ORA-00908: отсутствует ключевое слово NULL errorNum: 908, смещение: 46 }
1 ответ
Как насчет изменения запроса
var query = "delete from table where nvl(event, '__') = nvl(:event, '__')";
var bind_vars = [null];
connection.execute(query, bind_vars, { autoCommit: true }, function(error, results) {});
он меняет нулевой столбец и значение на другой символ (__) с вашим собственным символом
Вам не нужна переменная связывания для этого...
Учитывая следующую таблицу:
create table t (
c number
);
insert into t values (1);
insert into t values (null);
insert into t values (3);
insert into t values (null);
insert into t values (5);
commit;
Это должно работать:
const oracledb = require('oracledb');
const config = require('./dbConfig.js');
async function runTest() {
let conn;
try {
conn = await oracledb.getConnection(config);
let result;
let value = 1;
if (value === null) {
result = await conn.execute('delete from t where c is null');
} else { // other values should have a bind
result = await conn.execute('delete from t where c = :value', [value]);
}
// Note that the work was not committed.
console.log('Rows deleted:', result.rowsAffected);
} catch (err) {
console.error(err);
} finally {
if (conn) {
try {
await conn.close();
} catch (err) {
console.error(err);
}
}
}
}
runTest();