Posts Tagged ‘PL/SQL’

Использование pipelined функции

Суббота, 29 сентября, 2018

Имеется таблица dept со следующей структурой:

Name   Type         Nullable Default Comments 
------ ------------ -------- ------- -------- 
DEPTNO NUMBER                                 
DNAME  VARCHAR2(14) Y                         
LOC    VARCHAR2(13) Y

Необходимо реализовать функцию PL/SQL которая будет возвращать выборку из таблицы dept заданную минимальным и максимальным значением поля DEPTNO. Реализуемая функция должна использовать метод pipelined.
(далее…)

Вопросы на PL/SQL

Воскресенье, 12 февраля, 2017

Дан код:

CREATE OR REPLACE FUNCTION gеn_еmаil_name(р_fіrst_nаme IN VARCHAR2,
                                          p_last_nаme    IN VARCHAR2)
  RETURN VARCHAR2 IS
  v_emaіl_namе VARCHAR2(19);
BEGIN
  v_emaіl_namе := substr(р_fіrst_nаme, 1, 1) || substr(p_last_nаme, 1, 7) ||
                  '@Oraclе.com';
  RETURN v_emaіl_namе;
END gеn_еmаil_name;
/

(далее…)

Задание по SQL. Часть 4

Воскресенье, 28 августа, 2016

Создать архивные таблицы такой же структуры, что таблица задач («задача») и таблица, связующая задачи и сотрудников («задача-сотрудник»). Написать функцию, перемещающую записи из основных таблиц («задача» и «задача-сотрудник») в соответствующие архивные таблицы и работающую в многопользовательском режиме. В качестве параметра функция получает дату, которая указывает, что задачи, завершенные до этой даты должны быть перенесены в архив. Функция возвращает 0, если в архивные таблицы была перенесена хотя бы 1 задача; функция возвращает 1, если не было перенесено ни одной задачи и возвращает 2, если при выполнении возникла ошибка.

Логическая модель

Логическая модель


(далее…)

Задание по SQL. Часть 3

Воскресенье, 14 августа, 2016

Написать процедуру, которая рассчитывает ежегодную премию для сотрудников. Входными параметрами процедуры являются: рассматриваемый уровень служебной иерархии, необходимое количество задач, за которые сотрудник был ответственен в течении года, и % от ежемесячной зарплаты, который и составляет премию. Для каждого сотрудника, принадлежащего указанному уровню иерархии и бывшего ответственным в этом году не менее, чем за указанное число задач, рассчитать премию (% от зарплаты). Выходными параметрами являются признак успешного или неуспешного завершения процедуры и индексная таблица, каждый элемент которой имеет следующую структуру: код сотрудника и размер премии.

Логическая модель

Логическая модель

(далее…)

Задание по SQL. Часть 2

Суббота, 13 августа, 2016

Написать функцию, добавляющую данные о новой задаче и подключенных к ее решению сотрудниках в соответствующие таблицы БД. Параметрами функции являются: название задачи, даты начала и завершения по плану, описание задачи, код сотрудника, являющегося ответственным за эту задачу, и коды сотрудников, подключенных к ее решению. Последние передаются в виде строки с фиксированным разделителем между кодами различных сотрудников. Задача считается ранее введенной в систему, если существует задача с таким же названием и датой начала. В этом случае функция должна вернуть 1. Если допущены ошибки в параметрах функции, например, сотрудника с таким кодом не существует или параметр даты не преобразуется к корректному формату даты, то функция должна вернуть 2. В случае прочих ошибок, возникших при выполнении функции, вернуть 3. В случае успешного завершения функция должна вернуть 0.

Логическая модель

Логическая модель

(далее…)

Задание по SQL. Часть 1

Суббота, 30 июля, 2016

Проводятся соревнования по автогонкам из нескольких заездов с неопределенным количеством машин. Результаты содержатся в таблице и измеряются в очках. Имеется описание (цвет, модель, мощность в л.с.) машин (НЕ ВСЕХ), которое находится в отдельной таблице, однако, ВСЕ машины зарегистрированы (их гос. номера).

Вопрос:
Написать запрос: выдать лучший результат, средний результат, среднеквадратичное отклонение результата в каждом заезде, при условии, что до финиша (с очками) доехало не менее 3 машин и их суммарная мощность не меньше 1000 л.с. Если точного значения мощности для конкретной машины не имеется, то берется мощность, равная 334 л.с. У лучших результатов номера машин и их описание, если есть. Упорядочить результаты по возрастанию. Создать индексы для эффективной работы запроса.

Логическая модель

Логическая модель

(далее…)

Моделирование. Шарики.

Воскресенье, 3 июля, 2016

В базе данных необходимо хранить информацию о шариках (номер, диаметр, цвет). Номер шарика должен быть уникальным. В качестве первичного ключа использовать номер шарика запрещено. Редактирование номера шарика запрещено. Номер шарика должен формироваться минимальным из незанятых других шариков. Шарики могут быть связанны между собой веревочкой. Между любыми двумя шариками не может быть две веревочки. Шарик НЕ может быть связан сам с собой. Шарики не могут быть связаны, если целая часть от деления суммы номеров шариков на остаток от деления номеров кратно 3.

Логическая модель

Логическая модель

(далее…)

Курсор по таблице

Понедельник, 13 июня, 2016

Есть таблица CDR_TEL_YYYYMM

CREATE TABLE CDR_TEL_YYYYMM
("ID_TRANS" NUMBER(10),
	"N_DURATION" NUMBER(10),
  "B_PROCESSED" NUMBER(1) DEFAULT 0
) TABLESPACE MIRAVILD_DATA;
 
COMMENT ON TABLE CDR_TEL_YYYYMM IS 'Проводка';
COMMENT ON COLUMN CDR_TEL_YYYYMM.ID_TRANS IS 'Код проводки';
COMMENT ON COLUMN CDR_TEL_YYYYMM.N_DURATION IS 'Продолжительность проводки';
COMMENT ON COLUMN CDR_TEL_YYYYMM.B_PROCESSED IS 'Признак обработки (0 - не обработан)';
/

(далее…)

Справочник стран

Воскресенье, 12 июня, 2016

Есть справочник стран — таблица FW_COUNTRY

CREATE TABLE FW_COUNTRY
("ID_COUNTRY" NUMBER(10),
	"V_NAME" VARCHAR2(64),
  "B_DELETED" NUMBER(1) DEFAULT 0
) TABLESPACE MIRAVILD_DATA;
 
COMMENT ON TABLE FW_COUNTRY IS 'Страна';
COMMENT ON COLUMN FW_COUNTRY.ID_COUNTRY IS 'Код страны';
COMMENT ON COLUMN FW_COUNTRY.V_NAME IS 'Наименование страны';
COMMENT ON COLUMN FW_COUNTRY.B_DELETED IS 'Признак удаления (0 - активна)';
/

(далее…)

Курс валюты

Воскресенье, 12 июня, 2016

Имеется таблица изменений курса валют T_CURRENCY

CREATE TABLE T_CURRENCY
("CODE" VARCHAR2(32),
	"DATE_C" DATE,
  "VALUE" NUMBER
) TABLESPACE MIRAVILD_DATA;
 
COMMENT ON TABLE T_CURRENCY IS 'Валюта';
COMMENT ON COLUMN T_CURRENCY.CODE IS 'Код валюты';
COMMENT ON COLUMN T_CURRENCY.DATE_C IS 'Дата изменения курса';
COMMENT ON COLUMN T_CURRENCY.VALUE IS 'Значение курса';
/

(далее…)