2016-09-09 2 views
0

Я пытаюсь удалить строку из таблицы в базе данных Oracle с помощью этого JS функции:Oracle удалить заявление не работает в JS

deleteDirection(directionId, callback) { 
if (!this.connected) { 
    return Promise.reject(new Error('not connected')).asCallback(callback) 
} 
const connection = this.connection 

const task = Promise.coroutine(function*() { 
    const conn = yield connection 
    const query = 'DELETE FROM directions WHERE direction_id = :directionId' 
    const result = yield conn.execute(query, { directionId }, { 
    outFormat: oracle.OBJECT, 
    }) 
    .then(directionDeleted => { 
    if (directionDeleted.rowsAffected === 0) { 
     return Promise.reject(new Error('invalid number')) 
    } 
    return Promise.resolve(directionDeleted) 
    }) 
    .catch(err => Promise.reject(new Error(err))); 

    return Promise.resolve(result) 
}) 
return Promise.resolve(task()).asCallback(callback) 
} 

Функции отделка без каких-либо проблем, но строка не удаляется , если я попробую тот же оператор в Oracle SQL Developer, он работает эффективно, что может быть проблемой?

ответ

0

Попробуйте это:

deleteDirection(directionId, callback) { 
if (!this.connected) { 
    return Promise.reject(new Error('not connected')).asCallback(callback) 
} 
const connection = this.connection 

const task = Promise.coroutine(function*() { 
    const conn = yield connection 
    const query = 'DELETE FROM directions WHERE direction_id = :directionId' 
    const result = yield conn.execute(query, { directionId: directionId}, { 
    outFormat: oracle.OBJECT, 
    autoCommit: true 
    }) 
    .then(directionDeleted => { 
    if (directionDeleted.rowsAffected === 0) { 
     return Promise.reject(new Error('invalid number')) 
    } 
    return Promise.resolve(directionDeleted) 
    }) 
    .catch(err => Promise.reject(new Error(err))); 

    return Promise.resolve(result) 
}) 
return Promise.resolve(task()).asCallback(callback) 
} 

Обратите внимание на изменения в переменной связывания и использование Autocommit.

Вы используете транспилер?

+0

Вы были правы, autoCommit был решением, но нет необходимости изменять переменную связывания, с {directionId} его штраф, спасибо за вашу помощь и да проект имеет транспилер –

0

примеры Последующие NodeOracle и параметры проходят как массив:

const result = yield conn.execute(query, [ directionId ], { 
    outFormat: oracle.OBJECT, 
    }) 

https://github.com/oracle/node-oracledb/blob/master/examples/select1.js

+0

спасибо, но до сих пор без удаления, я даже попытался это: константных запросом = 'DELETE FROM направлений, где direction_id = 630' результат = Const выхода conn.execute (запрос, {}, { outFormat: oracle.OBJECT, }) только для испытания, но не удаляется –

+0

. Ради теста, можете ли вы сделать это без функции генератора и поделиться результатами? –

+1

Привет, я уже решил, проблема заключалась в отсутствии этой строки «autoCommit: true» после «outFormat: oracle.OBJECT», –

Смежные вопросы