add repository working with stored procedures
This commit is contained in:
@@ -1,2 +1,95 @@
|
||||
# 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
|
||||
$$
|
||||
Reference in New Issue
Block a user