Вернул $$ в листинги

This commit is contained in:
2024-11-12 14:17:33 +03:00
parent 99b5d44362
commit 5dce1d3f9a

View File

@@ -191,7 +191,7 @@
\label{fig:view} \label{fig:view}
\end{figure} \end{figure}
\begin{lstlisting}[mathescape=true, language=SQL, caption={Запрос для создания представления \texttt{sportsman\_requests\_series\_count}.}, label={lst:view1}] \begin{lstlisting}[language=SQL, caption={Запрос для создания представления \texttt{sportsman\_requests\_series\_count}.}, label={lst:view1}]
create view create view
sportsman_requests_series_count as sportsman_requests_series_count as
select select
@@ -210,7 +210,7 @@
Также был составлен пример запроса, в котором используется представление \texttt{sportsman\_requests\_series\_count}, его код представлен на Рис.~\ref{lst:view2}. В этом запросе выбираются 10 самых активных с точки зрения участия в соревнованиях спортсменов из клуба <<ЛК Парадокс Лучника>>. К исходному представлению также добавляются дополнительные столбцы с данными спортсмена из таблицы \texttt{sportsman}. Результат выполнения этого запроса представлен на Рис.~\ref{fig:view_query}. Также был составлен пример запроса, в котором используется представление \texttt{sportsman\_requests\_series\_count}, его код представлен на Рис.~\ref{lst:view2}. В этом запросе выбираются 10 самых активных с точки зрения участия в соревнованиях спортсменов из клуба <<ЛК Парадокс Лучника>>. К исходному представлению также добавляются дополнительные столбцы с данными спортсмена из таблицы \texttt{sportsman}. Результат выполнения этого запроса представлен на Рис.~\ref{fig:view_query}.
\begin{lstlisting}[mathescape=true, language=SQL, caption={Код примера запроса, в котором используется представление \texttt{sportsman\_requests\_series\_count}.}, label={lst:view2}] \begin{lstlisting}[language=SQL, caption={Код примера запроса, в котором используется представление \texttt{sportsman\_requests\_series\_count}.}, label={lst:view2}]
select select
srsc.id_sportsman, srsc.id_sportsman,
s.name, s.name,
@@ -252,7 +252,7 @@
Для выполнения поставленной задачи, была создана отдельная таблица для сохранения статистики -- \texttt{judge\_statistics}. Код запроса для её создания представлен на Рис.~\ref{lst:trigger-table}. Для выполнения поставленной задачи, была создана отдельная таблица для сохранения статистики -- \texttt{judge\_statistics}. Код запроса для её создания представлен на Рис.~\ref{lst:trigger-table}.
\begin{lstlisting}[mathescape=true, language=SQL, caption={Код запроса для создания таблицы \texttt{judge\_statistics}.}, label={lst:trigger-table}] \begin{lstlisting}[language=SQL, caption={Код запроса для создания таблицы \texttt{judge\_statistics}.}, label={lst:trigger-table}]
create table judge_statistics ( create table judge_statistics (
id_judge integer primary key, id_judge integer primary key,
competition_count integer not null default 0, competition_count integer not null default 0,
@@ -269,7 +269,7 @@
\item \textbf{Действие:} добавляет нового судью в \texttt{judge\_statistics}. \item \textbf{Действие:} добавляет нового судью в \texttt{judge\_statistics}.
\item \textbf{Код:} листинг~\ref{lst:trigger1}. \item \textbf{Код:} листинг~\ref{lst:trigger1}.
\end{itemize} \end{itemize}
\begin{lstlisting}[mathescape=true, language=SQL, caption={Код запроса для создания триггера \texttt{after\_judge\_insert} и функции \texttt{update\_statistics\_on\_judge\_insert}.}, label={lst:trigger1}] \begin{lstlisting}[language=SQL, caption={Код запроса для создания триггера \texttt{after\_judge\_insert} и функции \texttt{update\_statistics\_on\_judge\_insert}.}, label={lst:trigger1}]
create or replace function update_statistics_on_judge_insert() create or replace function update_statistics_on_judge_insert()
returns trigger as $$ returns trigger as $$
begin begin
@@ -290,7 +290,7 @@ execute function update_statistics_on_judge_insert();
\item \textbf{Действие:} удаляет судей из \texttt{judge\_statistics}. \item \textbf{Действие:} удаляет судей из \texttt{judge\_statistics}.
\item \textbf{Код:} листинг~\ref{lst:trigger2}. \item \textbf{Код:} листинг~\ref{lst:trigger2}.
\end{itemize} \end{itemize}
\begin{lstlisting}[mathescape=true, language=SQL, caption={Код запроса для создания триггера \texttt{after\_judge\_delete} и функции \texttt{update\_statistics\_on\_judge\_delete}.}, label={lst:trigger2}] \begin{lstlisting}[language=SQL, caption={Код запроса для создания триггера \texttt{after\_judge\_delete} и функции \texttt{update\_statistics\_on\_judge\_delete}.}, label={lst:trigger2}]
create or replace function update_statistics_on_judge_delete() create or replace function update_statistics_on_judge_delete()
returns trigger as $$ returns trigger as $$
begin begin
@@ -310,7 +310,7 @@ execute function update_statistics_on_judge_delete();
\item \textbf{Действие:} увеличивает на единицу счётчик с количеством соревнований \\ в \texttt{judge\_statistics} для судьи, от имени которого была добавлена заявка. \item \textbf{Действие:} увеличивает на единицу счётчик с количеством соревнований \\ в \texttt{judge\_statistics} для судьи, от имени которого была добавлена заявка.
\item \textbf{Код:} листинг~\ref{lst:trigger3}. \item \textbf{Код:} листинг~\ref{lst:trigger3}.
\end{itemize} \end{itemize}
\begin{lstlisting}[mathescape=true, language=SQL, caption={Код запроса для создания триггера \texttt{after\_judge\_request\_insert} и функции \texttt{update\_statistics\_on\_judge\_request\_insert}.}, label={lst:trigger3}] \begin{lstlisting}[language=SQL, caption={Код запроса для создания триггера \texttt{after\_judge\_request\_insert} и функции \texttt{update\_statistics\_on\_judge\_request\_insert}.}, label={lst:trigger3}]
create or replace function update_statistics_on_judge_request_insert() create or replace function update_statistics_on_judge_request_insert()
returns trigger as $$ returns trigger as $$
begin begin
@@ -332,7 +332,7 @@ execute function update_statistics_on_judge_request_insert();
\item \textbf{Действие:} уменьшает на единицу счётчик с количеством соревнований \\ в \texttt{judge\_statistics} для судьи, от имени которого была добавлена заявка. \item \textbf{Действие:} уменьшает на единицу счётчик с количеством соревнований \\ в \texttt{judge\_statistics} для судьи, от имени которого была добавлена заявка.
\item \textbf{Код:} листинг~\ref{lst:trigger4}. \item \textbf{Код:} листинг~\ref{lst:trigger4}.
\end{itemize} \end{itemize}
\begin{lstlisting}[mathescape=true, language=SQL, caption={Код запроса для создания триггера \texttt{after\_judge\_request\_delete} и функции \texttt{update\_statistics\_on\_judge\_request\_delete}.}, label={lst:trigger4}] \begin{lstlisting}[language=SQL, caption={Код запроса для создания триггера \texttt{after\_judge\_request\_delete} и функции \texttt{update\_statistics\_on\_judge\_request\_delete}.}, label={lst:trigger4}]
create or replace function update_statistics_on_judge_request_delete() create or replace function update_statistics_on_judge_request_delete()
returns trigger as $$ returns trigger as $$
begin begin
@@ -354,7 +354,7 @@ execute function update_statistics_on_judge_request_delete();
\item \textbf{Действие:} уменьшает на единицу счётчик с количеством соревнований для \\ в \texttt{judge\_statistics} для судьи, от имени которого была добавлена заявка. \item \textbf{Действие:} уменьшает на единицу счётчик с количеством соревнований для \\ в \texttt{judge\_statistics} для судьи, от имени которого была добавлена заявка.
\item \textbf{Код:} листинг~\ref{lst:trigger5}. \item \textbf{Код:} листинг~\ref{lst:trigger5}.
\end{itemize} \end{itemize}
\begin{lstlisting}[mathescape=true, language=SQL, caption={Код запроса для создания триггера \texttt{after\_judge\_request\_update} и функции \texttt{update\_statistics\_on\_judge\_request\_update}.}, label={lst:trigger5}] \begin{lstlisting}[language=SQL, caption={Код запроса для создания триггера \texttt{after\_judge\_request\_update} и функции \texttt{update\_statistics\_on\_judge\_request\_update}.}, label={lst:trigger5}]
create or replace function update_statistics_on_judge_request_update() create or replace function update_statistics_on_judge_request_update()
returns trigger as $$ returns trigger as $$
begin begin
@@ -398,7 +398,7 @@ execute function update_statistics_on_judge_request_update();
Примеры различных операций от имён этих пользователей вместе с реакцией СУБД демонстрируются в таблице~\ref{tbl:users}. Примеры различных операций от имён этих пользователей вместе с реакцией СУБД демонстрируются в таблице~\ref{tbl:users}.
\begin{lstlisting}[mathescape=true, caption={Код запросов для создания пользователей и выдачи им определённых прав.}, label={lst:users}] \begin{lstlisting}[caption={Код запросов для создания пользователей и выдачи им определённых прав.}, label={lst:users}]
create user readonly_user with password '123'; create user readonly_user with password '123';
grant usage on schema public to readonly_user; grant usage on schema public to readonly_user;
grant select on sportsman_requests_series_count to readonly_user; grant select on sportsman_requests_series_count to readonly_user;
@@ -572,7 +572,7 @@ grant usage, select on sequence shot_series_id_shot_series_seq to edit_user;
Код определения функции \texttt{convert\_to\_initials} представлен на Рис.~\ref{lst:convert_to_initials}. Функция принимает на вход три параметра типа \texttt{varchar}: \texttt{p\_name} -- имя, \texttt{p\_surname} -- фамилия, \texttt{p\_patronymic} -- отчество. Возвращает также \texttt{varchar} -- строку с инициалами. Функция отдельно обрабатывает случай, когда не задано отчество, в таком случае инициалы будут состоять только из первой буквы имени и фамилии. Код запроса с использованием этой функции представлен на Рис.~\ref{lst:convert_query}, а результат его выполнения на Рис.~\ref{fig:conver_result}. Код определения функции \texttt{convert\_to\_initials} представлен на Рис.~\ref{lst:convert_to_initials}. Функция принимает на вход три параметра типа \texttt{varchar}: \texttt{p\_name} -- имя, \texttt{p\_surname} -- фамилия, \texttt{p\_patronymic} -- отчество. Возвращает также \texttt{varchar} -- строку с инициалами. Функция отдельно обрабатывает случай, когда не задано отчество, в таком случае инициалы будут состоять только из первой буквы имени и фамилии. Код запроса с использованием этой функции представлен на Рис.~\ref{lst:convert_query}, а результат его выполнения на Рис.~\ref{fig:conver_result}.
\begin{lstlisting}[mathescape=true, caption={Код определения функции \texttt{convert\_to\_initials}.}, label={lst:convert_to_initials}] \begin{lstlisting}[caption={Код определения функции \texttt{convert\_to\_initials}.}, label={lst:convert_to_initials}]
create or replace function convert_to_initials( create or replace function convert_to_initials(
p_name varchar, p_name varchar,
p_surname varchar, p_surname varchar,
@@ -588,7 +588,7 @@ end;
$$ language plpgsql; $$ language plpgsql;
\end{lstlisting} \end{lstlisting}
\begin{lstlisting}[mathescape=true, caption={Код запроса с использованием функции \texttt{convert\_to\_initials}.}, label={lst:convert_query}] \begin{lstlisting}[caption={Код запроса с использованием функции \texttt{convert\_to\_initials}.}, label={lst:convert_query}]
select select
id_judge, id_judge,
convert_to_initials (name, surname, patronymic), convert_to_initials (name, surname, patronymic),
@@ -608,7 +608,7 @@ from
Код определения процедуры \texttt{create\_participant\_request} представлен на Рис.~\ref{lst:procedure}. Процедура принимает на вход пять параметров типа \texttt{varchar}: \texttt{p\_name} -- имя спортсмена, \texttt{p\_surname} -- фамилия спортсмена, \texttt{p\_gender} -- пол спортсмена, \texttt{p\_competition\_title} -- название соревнования, \texttt{p\_division\_title} -- название дивизиона. Внутри процедуры сначала проверяется существование дивизиона в базе данных по переданному названию. Если дивизион не найден, выбрасывается ошибка. Затем проверяется существование соревнования. Если соревнование не существует, оно создаётся. Далее проверяется, существует ли спортсмен с указанными именем, фамилией и полом. Если спортсмен не найден, то создаётся новая запись о спортсмене. В конце создаётся заявка участника с указанием данных спортсмена, соревнования и дивизиона. Код определения процедуры \texttt{create\_participant\_request} представлен на Рис.~\ref{lst:procedure}. Процедура принимает на вход пять параметров типа \texttt{varchar}: \texttt{p\_name} -- имя спортсмена, \texttt{p\_surname} -- фамилия спортсмена, \texttt{p\_gender} -- пол спортсмена, \texttt{p\_competition\_title} -- название соревнования, \texttt{p\_division\_title} -- название дивизиона. Внутри процедуры сначала проверяется существование дивизиона в базе данных по переданному названию. Если дивизион не найден, выбрасывается ошибка. Затем проверяется существование соревнования. Если соревнование не существует, оно создаётся. Далее проверяется, существует ли спортсмен с указанными именем, фамилией и полом. Если спортсмен не найден, то создаётся новая запись о спортсмене. В конце создаётся заявка участника с указанием данных спортсмена, соревнования и дивизиона.
\begin{lstlisting}[mathescape=true, caption={Код определения процедуры \texttt{create\_participant\_request}.}, label={lst:procedure}] \begin{lstlisting}[caption={Код определения процедуры \texttt{create\_participant\_request}.}, label={lst:procedure}]
create or replace procedure create_participant_request( create or replace procedure create_participant_request(
p_name varchar(100), p_name varchar(100),
p_surname varchar(100), p_surname varchar(100),