Criar procedimentos armazenados

Concluído

O Azure Cosmos DB fornece execução transacional integrada à linguagem do JavaScript que permite gravar procedimentos armazenados, gatilhose funções definidas pelo usuário (UDFs). Para chamar um procedimento armazenado, gatilho ou função definida pelo usuário, você precisa registrá-lo. Para obter mais informações, consulte Como trabalhar com procedimentos armazenados, gatilhos, funções definidas pelo usuário no Azure Cosmos DB.

Nota

Esta unidade se concentra em procedimentos armazenados, a unidade a seguir aborda gatilhos e funções definidas pelo usuário.

Escrevendo procedimentos armazenados

Os procedimentos armazenados podem criar, atualizar, ler, consultar e excluir itens dentro de um contêiner do Azure Cosmos. Os procedimentos armazenados são registrados por coleção e podem operar em qualquer documento ou anexo presente nessa coleção.

Aqui está um procedimento armazenado simples que retorna uma resposta "Olá, Mundo".

var helloWorldStoredProc = {
    id: "helloWorld",
    serverScript: function () {
        var context = getContext();
        var response = context.getResponse();

        response.setBody("Hello, World");
    }
}

O objeto de contexto fornece acesso a todas as operações que podem ser executadas no Azure Cosmos DB e acesso aos objetos de solicitação e resposta. Nesse caso, você usa o objeto de resposta para definir o corpo da resposta a ser enviada de volta ao cliente.

Criar um item usando o procedimento armazenado

Quando você cria um item usando um procedimento armazenado, o item é inserido no contêiner do Azure Cosmos DB e uma ID para o item recém-criado é retornada. A criação de um item é uma operação assíncrona e depende das funções de retorno de chamada javaScript. A função de retorno de chamada tem dois parâmetros: um para o objeto de erro caso a operação falhe e outro para um valor retornado, nesse caso, o objeto criado. Dentro do callback, você pode manipular a exceção ou lançar um erro. Se um retorno de chamada não for fornecido e houver um erro, o ambiente de execução do Azure Cosmos DB gerará um erro.

O procedimento armazenado também inclui um parâmetro para definir a descrição como um valor booliano. Quando o parâmetro é definido como true e a descrição está ausente, o procedimento armazenado gera uma exceção. Caso contrário, o restante do procedimento armazenado continuará sendo executado.

Esse procedimento armazenado usa como entrada documentToCreate, o corpo de um documento a ser criado na coleção atual. Todas essas operações são assíncronas e dependem de retornos de chamada de função JavaScript.

var createDocumentStoredProc = {
    id: "createMyDocument",
    body: function createMyDocument(documentToCreate) {
        var context = getContext();
        var collection = context.getCollection();
        var accepted = collection.createDocument(collection.getSelfLink(),
              documentToCreate,
              function (err, documentCreated) {
                  if (err) throw new Error('Error' + err.message);
                  context.getResponse().setBody(documentCreated.id)
              });
        if (!accepted) return;
    }
}

Matrizes como parâmetros de entrada para procedimentos armazenados

Ao definir um procedimento armazenado no portal do Azure, os parâmetros de entrada sempre são enviados como uma cadeia de caracteres para o procedimento armazenado. Mesmo se você passar uma matriz de cadeias de caracteres como uma entrada, a matriz será convertida em cadeia de caracteres e enviada para o procedimento armazenado. Para contornar isso, você pode definir uma função em seu procedimento armazenado para analisar a cadeia de caracteres como uma matriz. O código a seguir mostra como analisar um parâmetro de entrada de cadeia de caracteres como uma matriz:

function sample(arr) {
    if (typeof arr === "string") arr = JSON.parse(arr);

    arr.forEach(function(a) {
        // do something here
        console.log(a);
    });
}

Execução delimitada

Todas as operações do Azure Cosmos DB devem ser concluídas em um período limitado de tempo. Os procedimentos armazenados têm um tempo limitado para serem executados no servidor. Todas as funções de coleção retornam um valor booliano que representa se essa operação é concluída ou não

Transações dentro de procedimentos armazenados

Você pode implementar transações em itens em um contêiner usando um procedimento armazenado. As funções JavaScript podem implementar um modelo baseado em continuação para lote ou retomar a execução. O valor de continuação pode ser qualquer valor de sua escolha e seus aplicativos podem usar esse valor para retomar uma transação de um novo ponto de partida. O diagrama a seguir descreve como o modelo de continuação de transação pode ser usado para repetir uma função do lado do servidor até que a função conclua toda a carga de trabalho de processamento.

Este diagrama descreve como o modelo de continuação da transação pode ser usado para repetir uma função do lado do servidor até que a função conclua toda a carga de trabalho de processamento.