# example-csharp-app DB sql // pgsql -- Вставка CREATE PROCEDURE "sp_InsertBook"( Id UUID, Title VARCHAR(255), Author VARCHAR(255), YearPublished TimestampTz = NULL, BookIndex XML = NULL ) LANGUAGE plpgsql as $$ BEGIN INSERT INTO "Books" ("Id", "Title", "Author", "YearPublished", "BookIndex") VALUES (Id, Title, Author, YearPublished, BookIndex); end $$ -- Обновление CREATE PROCEDURE "sp_UpdateBook"( Id UUID, Title VARCHAR(255), Author VARCHAR(255), YearPublished TimestampTz, BookIndex xml ) LANGUAGE plpgsql as $$ BEGIN UPDATE "Books" SET "Title" = Title, "Author" = Author, "YearPublished" = YearPublished, "BookIndex" = BookIndex WHERE "Id" = Id; end $$ -- удаление CREATE PROCEDURE "sp_DeleteBook"( Id UUID ) LANGUAGE plpgsql as $$ BEGIN DELETE FROM "Books" WHERE "Id" = Id; end $$ -- получение данных CREATE FUNCTION "sp_GetBookById"(BookId UUID) returns table ( "Id" UUID, "Author" TEXT, "Title" TEXT, "YearPublished" TIMESTAMPTZ, "BookIndex" XML ) LANGUAGE plpgsql as $$ BEGIN RETURN QUERY SELECT b."Id", b."Author", b."Title", b."YearPublished", b."BookIndex" FROM "Books" b WHERE b."Id" = BookId; END $$ -- поиск по библиотеке CREATE FUNCTION "sp_SearchBooks"(p_Title TEXT, p_Author TEXT, p_Index TEXT) returns table ( "Id" UUID, "Author" TEXT, "Title" TEXT, "YearPublished" TIMESTAMPTZ, "BookIndex" XML ) LANGUAGE plpgsql as $$ BEGIN RETURN QUERY SELECT b."Id", b."Author", b."Title", b."YearPublished", b."BookIndex" FROM "Books" b WHERE (p_Author IS NULL OR b."Author" ~* p_Author) AND (p_Title IS NULL OR b."Title" ~* p_Title) AND (b."BookIndex"::TEXT ILIKE CONCAT('%', p_Index, '%')); END $$