Параметризация Query при использовании предложения OFFSET - PullRequest
1 голос
/ 05 июня 2019

Я использовал следующую хранимую процедуру и пытаюсь параметризировать запрос, передавая числовой параметр.Однако это дает мне ошибку при выполнении хранимой процедуры.Любые идеи действительно полезны

function uspGetUsersByPage(number) {
  //Set Environment
  let context = getContext();
  let coll = context.getCollection();
  let link = coll.getSelfLink();
  let response = context.getResponse(); 

  let query = {
    query: 'SELECT * FROM a WHERE a.DocumentType = "UserRole" and a.AuditFields.IsLatest = true and a.AuditFields.IsDeleted = false OFFSET @number LIMIT 20'
    , parameters: [{ name: '@number', value: number }]
  };


  //Execute the query against the collection
  let runquery = coll.queryDocuments(link, query, {}, callbackfn);

  //Call function to throw an error(if any) or display the output
  function callbackfn(err, queryoutput) {
    if (err) {
      throw err;
    }

    if (!queryoutput || !queryoutput.length) {
      response.setBody(null);
    }
    else {
      response.setBody(queryoutput);
    }
  };

  //Display standard output if query doesnt get any results
  if (!runquery) { throw Error('Unable to retrieve requested information'); }
};

1 Ответ

0 голосов
/ 07 июня 2019

Пожалуйста, смотрите мой простой тест после вашего описания.

Данные:

enter image description here

Хранимая процедура:

function sample(prefix) {
    var collection = getContext().getCollection();
    var query =  {query: "SELECT c.id,c.number FROM c offset @num limit 1", parameters: 
[{name: "@num", value: prefix}]};

   console.log(query);
    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        query,
    function (err, feed, options) {
        if (err) throw err;

        // Check the feed and if empty, set the body to 'no docs found', 
        // else take 1st element from feed
        if (!feed || !feed.length) {
            var response = getContext().getResponse();
            response.setBody('no docs found');
        }
        else {
            var response = getContext().getResponse();   
            response.setBody(feed);
        }
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

Введите:

enter image description here

Выход:

enter image description here

...