2017-11-02 18 views
0

안녕하세요 저는 쿼리가 있고 resultSet을 사용하여 데이터를 처리하고 있습니다. 쿼리가 잘 작동하지만 'ORDER BY DES'라는 이름을 붙이면 ORA-00933 : SQL 명령이 제대로 종료되지 않았습니다.ORDER BY 쿼리에서 나를 제공합니다 ORA-00933 : SQL 명령이 제대로 끝나지 않았습니다

이것은 내 검색어입니다.

router.post('/report/', jsonParser, function (req, res) { 
    var data = req.body, 
     startRow = data.startRow, 
     numRows = data.numRows, 
     sortCol = data.sortCol, 
     sortDir = data.sortDir; 

    var countQuery = 'SELECT COUNT(*) ' + 
     'FROM this_view ' ; 

    var query = 'SELECT t.NAME "NAME", ' + 
       't.AGE "AGE" ' + 
       'FROM this_view t ' + 
       'ORDER BY NAME desc'; 

    var seg, 
     orderBy, 
     offset; 

    orderBy = ' ORDER BY UPPER(' + sortCol + ') ' + sortDir; 
    offset = ' OFFSET ' + startRow + ' ROWS FETCH NEXT ' + numRows + ' ROWS ONLY'; 

    query += orderBy; 
    query += offset; 

     async.parallel({ 
     rows: function (callback) { 
      pool.getConnection(function (err, connection) { 
       logger.info("Begin Connection: " + (new Date().toString())); 
       if (err) { 
        logger.error(err.message); 
        return; 
       } 

       logger.info("Begin execute: " + (new Date().toString())); 

       connection.execute(
        query, 
        [], 
        { 
         resultSet: true, 
         prefetchRows: 1000 
        }, 
        function (err, result) { 
         logger.info("End execute: " + (new Date().toString())); 
         // var rowsProcessed = 0; 
         // var startTime; 
         if (err) { 
          logger.error(err.message); 
          callback("Something broke in the first thing"); 
          doRelease(connection); 
          return; 
         } 
         var procJson = []; 
         function fetchRowsFromRS(connection, resultSet, numRows) { 
          resultSet.getRows(
           numRows, // get this many rows 
           function (err, rows) { 
            if (err) { 
             console.error(err); 
             doClose(connection, resultSet); // always close the result set 
            } else if (rows.length > 0) { 

             /** 
             * For each row in the result, pushes a new object to the rows array 
             * In each new object, the key is assigned and the result row value set 
             */ 
             for (var i = 0; i < rows.length; i++) { 
              procJson.push({}); 
              for (var j = 0; j < resultSet.metaData.length; j++) { 
               procJson[i][resultSet.metaData[j].name.toLowerCase()] = rows[i][j]; 
              } 
             } 

             //TODO: Add null handling 
             logger.info("Send JSON: " + (new Date().toString())); 
             logger.info("JSON Sent: " + (new Date().toString())); 
             if (rows.length === numRows) // might be more rows 
              fetchRowsFromRS(connection, resultSet, numRows); 
             else 
              doClose(connection, resultSet); // always close the result set 
            } else { 
             callback(null, procJson); 
             doClose(connection, resultSet); // always close the result set 
            } 
           }); 
         } 
         fetchRowsFromRS(connection, result.resultSet, numRows) 
        }); 
      }); 
     }, 
     totalRows: function (callback) { 
      pool.getConnection(function (err, connection) { 
       logger.info("Begin Connection: " + (new Date().toString())); 
       if (err) { 
        logger.error(err.message); 
        return; 
       } 

       logger.info("Begin execute: " + (new Date().toString())); 

       connection.execute(
        countQuery, 
        function (err, result) { 
         logger.info("End execute: " + (new Date().toString())); 
         if (err) { 
          logger.error(err.message); 
          callback("Something broke"); 
          doRelease(connection); 
          return; 
         } 

         logger.info("Send JSON: " + (new Date().toString())); 
         callback(null, result.rows[0][0]); 
         logger.info("JSON Sent: " + (new Date().toString())); 

         doRelease(connection); 
        }); 
      }); 
     } 
    }, function(err, result){ 
     if(err){ 
      logger.error(err); 
     } 

     res.send(result); 
    }); 
}); 

나는 페이지 매기기 때문에 질의 자체에서 ORDER BY를 사용할 수 있습니까?

쿼리에서 ORDER BY를 사용하지 않으면 모든 것이 정상적으로 작동합니다. 제발 조언.

답변

0

주문 이름이 C입니까?

+0

죄송합니다. 그것의 desc. 나는 여기에 코드를 붙여 넣을 때 오타가 있었다. 업데이트 할 예정입니다. – a2441918