Когда я пытаюсь подключиться и вызвать процедуру для OracleDb с NodeJs Ошибка: DPI-1010: не подключен - PullRequest
1 голос
/ 09 марта 2020
async dbCEI(inOut){

    try{
       var connection = await oracledb.getConnection(dbConfig);
       // console.log("Connection Success");
        //console.log(this.typeName2);
       var tp1 =await connection.getDbObjectClass(this.typeName1);
       var tp2 =await connection.getDbObjectClass(this.typeName2);
       // console.log(tp1);
        var getbinds = infoEmirIslem(inOut,tp1,tp2);
        await connection.execute(this.nlsLang);
        await connection.execute(this.nlsDateFormat);
        var result = await connection.execute(this.procedureCall,getbinds)  
        var firstinOut =result.outBinds.p_cq;
        var emir = result.outBinds.p_ARRAYOUT;
        var islem = result.outBinds.p_islemler;
        var emirArray = convertArray(emir);
      //  console.log(emirArray)
        var islemArray =convertArray(islem);
      //  console.log(islemArray)
                  //  console.log(saat)
                  return [firstinOut,emirArray,islemArray];
    }catch(err){
        console.log(err)
    }
}

Параметр Inout равен 0 в начале. Я воссоединюсь с параметром out, который появляется через каждую секунду, и если в первой процедуре, которую я предпринял, появятся новые записи, я добавлю их. Когда я пишу connection.close () в конце функции, она выдает ошибку dp-1010 напрямую. Когда я не пишу connection.close (), значения обновляются каждые 4 и 5 раз в секундах, но затем это выдает ту же ошибку. почему пропадает связь, что мне делать

1 Ответ

0 голосов
/ 10 марта 2020

Возможно, блок try завершен (и соединение закрыто) до завершения вызовов convertArray. Это будет зависеть от времени. С Oracle объектами соединение должно оставаться открытым, пока вы не закончили с объектами.

Я заметил два ваших execute() вызова для установки среды NLS. Это две поездки туда и обратно между Node.js и БД, поэтому она медленная. Вы можете сделать то же самое за один вызов с помощью команды, подобной alter session set nls_date_format = 'YYYY-MM-DD' nls_language = AMERICAN. И / или установить значения в переменных среды NLS.

В зависимости от вашего приложения, можете ли вы использовать пул и поддерживать соединение открытым? Вы бы использовали пул sessionCallback для установки значений NLS, если вы не устанавливаете их через переменные среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...