Команда Sql неправильно завершилась при выполнении подзапроса через nodejs - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь получить все столбцы, присутствующие в таблице, с помощью этого подзапроса.

Я вызываю свой код с этими параметрами

let idsquery="select COLUMN_Name from ids_columns where table_id = (select table_id from ids_tables where table_name ='ZR_INVOICE_DETAILS');";
idsFunction(idsquery,icallback);

вот мой код

const oracledb = require('oracledb');
const idsObj=require('../config').idsObj;
let error;
let user;
function idsconnection(query,callback){
  // var query="select COLUMN_Name from ids_columns where table_id=2016";
  console.log(query);
  oracledb.getConnection(
      idsObj,
      function(err, connection) {
        if (err) {
          console.log('failed to connect',err);
          error = err;
          return;
        }
        connection.execute(query, [], function(err, result) {
          if (err) {
            console.log('failed to execute',err);
            error = err;
            return;
          }
          // console.log('column names are',result.metaData);
          // console.log('rows are',result.rows);
          // console.log('rows count is',result.rows.length);

          connection.close(function(err) {
            if (err) {
              console.log('failed to close connection',err);
            }
            // console.log('callback is ',callback);
            callback(result)
          });
        })
      }
  );
}

module.exports=idsconnection;

этот код работает нормально, когда я его называю

let idsquery="select COLUMN_Name from ids_columns where table_id = 2012;";
idsFunction(idsquery,icallback);

вот так

но выдает эту ошибку, когда я выполняю 1-й запрос

failed to execute { [Error: ORA-00933: SQL command not properly ended] errorNum:933, offset: 125 }

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Как упомянуто @ alex-poole в комментарии, проблема (или первая проблема) будет заключаться в том, что у вас есть конечная точка с запятой в выражении:

let idsquery="select COLUMN_Name from ids_columns where table_id = (select table_id from ids_tables where table_name ='ZR_INVOICE_DETAILS');";

Измените его на:

let idsquery="select COLUMN_Name from ids_columns where table_id = (select table_id from ids_tables where table_name ='ZR_INVOICE_DETAILS')";

Oracle SQL не включает точки с запятой.Заблуждение, что точки с запятой необходимы для PL / SQL, а также используются для SQL некоторыми инструментами, такими как SQL * Plus, чтобы сказать: «Это конец оператора, выполните все до этого».

0 голосов
/ 11 февраля 2019

Сам запрос выглядит нормально.Ошибка упоминает «смещение: 125», которое указывает на закрывающую скобку.

Поможет ли вам переписать этот запрос, чтобы он использовал соединение (и избегал подзапросов), например,

let idsquery="SELECT column_name FROM ids_columns c JOIN ids_tables t ON c.table_id = t.table_id WHERE t.table_name = 'ZR_INVOICE_DETAILS';";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...