Utwórz procedury składowane

Ukończone

Usługa Azure Cosmos DB zapewnia zintegrowane z językiem transakcyjne wykonywanie języka JavaScript, które umożliwia pisanie procedur składowanych, wyzwalaczy i funkcji zdefiniowanych przez użytkownika (UDF). Aby wywołać procedurę składowaną, wyzwalacz lub funkcję zdefiniowaną przez użytkownika, należy ją zarejestrować. Aby uzyskać więcej informacji, zobacz Jak pracować z procedurami składowanymi, wyzwalaczami, funkcjami zdefiniowanymi przez użytkownika w usłudze Azure Cosmos DB.

Notatka

Ta lekcja koncentruje się na procedurach składowanych. W poniższej lekcji omówiono wyzwalacze i funkcje zdefiniowane przez użytkownika.

Pisanie procedur składowanych

Procedury składowane mogą tworzyć, aktualizować, odczytywać, wykonywać zapytania i usuwać elementy wewnątrz kontenera usługi Azure Cosmos. Składowane procedury są rejestrowane na kolekcję i mogą działać na każdym dokumencie lub załączniku znajdującym się w tej kolekcji.

Oto prosta procedura składowana zwracająca odpowiedź "Hello World".

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

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

Obiekt kontekstu zapewnia dostęp do wszystkich operacji, które można wykonać w usłudze Azure Cosmos DB, oraz dostępu do obiektów żądania i odpowiedzi. W takim przypadku użyjesz obiektu odpowiedzi, aby ustawić treść odpowiedzi, która ma zostać odesłana do klienta.

Utwórz element przy użyciu procedury składowanej

Podczas tworzenia elementu przy użyciu procedury składowanej element jest wstawiany do kontenera usługi Azure Cosmos DB i zwracany jest identyfikator nowo utworzonego elementu. Tworzenie elementu jest operacją asynchroniczną i zależy od funkcji wywołania zwrotnego języka JavaScript. Funkcja wywołania zwrotnego ma dwa parametry: jeden dla obiektu błędu w przypadku niepowodzenia operacji, a drugi dla wartości zwracanej, w tym przypadku utworzonego obiektu. Wewnątrz wywołania zwrotnego można obsłużyć wyjątek lub zgłosić błąd. Jeśli wywołanie zwrotne nie zostanie podane i wystąpi błąd, środowisko uruchomieniowe usługi Azure Cosmos DB zgłasza błąd.

Procedura składowana zawiera również parametr służący do ustawiania opisu jako wartości logicznej. Gdy parametr ma wartość true i brakuje opisu, procedura składowana zgłasza wyjątek. W przeciwnym razie pozostała część procedury składowanej będzie kontynuować działanie.

Ta procedura składowana przyjmuje jako dane wejściowe documentToCreate, treść dokumentu do utworzenia w bieżącej kolekcji. Wszystkie takie operacje są asynchroniczne i zależą od wywołań zwrotnych funkcji Języka 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;
    }
}

Tablice jako parametry wejściowe dla procedur składowanych

Podczas definiowania procedury składowanej w witrynie Azure Portal parametry wejściowe są zawsze wysyłane jako ciąg do procedury składowanej. Nawet jeśli przekażesz tablicę ciągów jako dane wejściowe, tablica zostanie przekonwertowana na ciąg i wysłana do procedury składowanej. Aby obejść ten proces, możesz zdefiniować funkcję w ramach procedury składowanej, aby przeanalizować ciąg jako tablicę. Poniższy kod pokazuje, jak przeanalizować parametr wejściowy ciągu jako tablicę:

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

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

Ograniczone wykonywanie

Wszystkie operacje usługi Azure Cosmos DB muszą zostać ukończone w ograniczonym czasie. Procedury składowane mają ograniczony czas do uruchomienia na serwerze. Wszystkie funkcje kolekcji zwracają wartość logiczną, która reprezentuje, czy ta operacja zostanie ukończona, czy nie

Transakcje w ramach procedur składowanych

Możesz zrealizować transakcje na elementach znajdujących się w kontenerze przy użyciu procedury składowanej. Funkcje języka JavaScript mogą implementować model oparty na kontynuacji do przetwarzania wsadowego lub wznawiania wykonywania. Wartość kontynuacji może być dowolną wybraną wartością, a aplikacje mogą następnie użyć tej wartości, aby wznowić transakcję od nowego punktu wyjścia. Na poniższym diagramie przedstawiono sposób użycia modelu kontynuacji transakcji w celu powtórzenia funkcji po stronie serwera do momentu zakończenia całego obciążenia przetwarzania przez funkcję.

Ten diagram przedstawia sposób użycia modelu kontynuacji transakcji do powtarzania funkcji po stronie serwera do momentu zakończenia całego obciążenia przetwarzania przez funkcję.