\documentclass[12pt, a4paper] {ncc}
\usepackage[utf8] {inputenc}
\usepackage[T2A]{fontenc}
\usepackage[english, russian] {babel}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{listings,a4wide,longtable,amsmath,amsfonts,graphicx,tikz}
\usepackage{indentfirst,verbatim}

\begin{document}
\frenchspacing
\pagestyle{empty}
% ============================ ТИТУЛЬНЫЙ ЛИСТ ================================
\begin{center}
     Национальный исследовательский университет информационных технологий,
                              механики и оптики.\\
                       Кафедра Вычислительной Техники.\\
                       Системы управления базами данных.
\end{center}
\vspace{\stretch{2}}
\begin{center}
                         {\bf Лабораторная работа №1}\\
                                {\sl 608 вариант}
\end{center}
\vspace{\stretch{3}}
\begin{flushright}
                                          Работу выполнил студент группы P3315\\
                                                         {\it Халанский Дмитрий}
\end{flushright}
\vspace{\stretch{4}}
\begin{center}
                                      2016
\end{center}
\newpage
% ======================== КОНЕЦ ТИТУЛЬНОГО ЛИСТА ============================

% ================================ ОТЧЁТ =====================================

\section{Задание}

Используя сведения из представлений словаря данных, сформировать запрос,
реализующий полнотекстовый поиск по исходному коду всех процедур, функций и
триггеров в пределах заданной схемы. Поиск должен осуществляться независимо от
регистра символов в строке запроса. Полученная информация должна быть
представлена в виде списка следующего вида:

\begin{verbatim}
 Текст запроса: Н_Люди

 No. Имя объекта           # строки       Текст
 --- -------------------   -------------  --------------------------------------------
   1 MyFunction1           16             SELECT * FROM н_люди WHERE
   2 MyProcedure1          42             INSERT INTO Н_ЛЮДИ
		...
\end{verbatim}

Программу оформить в виде процедуры.

\section{Ход работы}

\subsection{Хорошее решение}

Решение не целиком соответствует спецификации, однако является менее
неграмотным. Процедура не выводит результат, а возвращает его, позволяя
осуществлять фильтрацию, дополнительную обработку и тонкую настройку формата
вывода, предоставляемую всей мощью \textbf{SQL*Plus}. Минусом этого подхода
является то, что не представляется возможным вывести строку \texttt{Текст
запроса:} перед результатом, а также нарушение требования оформления программы
в виде процедуры, потому как процедурой представлен лишь механизм выбора строк,
но не их вывода.

\verbatiminput{good.sql}

\subsection{Плохое решение}

Возможность более изощрённой настройки вывода, а также умещения всей логики
программы в процедуре, даёт ручное форматирование вывода. Малейшее требование,
к примеру, по увеличению размера одной колонки, приведёт к изменению в
трёх-четырёх кусках процедуры, что нехорошо.

\verbatiminput{bad.sql}

\section{Выводы}

В результате проделанной работы мы вспомнили основы синтаксиса PL/SQL и набор
функций для форматирования строк.

% ============================ КОНЕЦ ОТЧЁТА ==================================

\end{document}
