русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Задача. Пакет функций о вкладах.


Дата добавления: 2015-08-31; просмотров: 706; Нарушение авторских прав


Есть таблица вкладчиков KK_DEPOSIT вида

DEPOSIT_ID CLIENT_NAME DT AMOUNT
Карапетян 30.01.2011 123,89
Карапетян 31.01.2011 129,8
Саахов 24.09.2011 123123,91
Саахов 27.11.2011 90,98
Саахов 13.05.2010
Растрелли 10.01.2012

Написать пакет из функций по нахождению:

· последней даты вклада по входному параметру IN_CLIENT_NAME

· суммы всех вкладов по входному параметру IN_CLIENT_NAME

· суммы последних двух вкладов (или 0 или 1 вкладов, если нет двух) по входному параметру IN_CLIENT_NAME

 

Создадим таблицу и заполним данными:

CREATE TABLE KK_DEPOSIT(DEPOSIT_ID INTEGER, CLIENT_NAME VARCHAR2(40), DT DATE, AMOUNT NUMBER);

insert into kk_deposit(deposit_id,client_name,dt,amount) values(1,'Карапетян',to_date('30.01.2011','dd.mm.yyyy'),123.89);

insert into kk_deposit(deposit_id,client_name,dt,amount) values(2,'Карапетян',to_date('31.01.2011','dd.mm.yyyy'),129.8);

insert into kk_deposit(deposit_id,client_name,dt,amount) values(3,'Саахов',to_date('24.09.2011','dd.mm.yyyy'),123123.91);

insert into kk_deposit(deposit_id,client_name,dt,amount) values(4,'Саахов',to_date('27.11.2011','dd.mm.yyyy'),90.98);

insert into kk_deposit(deposit_id,client_name,dt,amount) values(5,'Саахов',to_date('13.05.2010','dd.mm.yyyy'),8000000);

insert into kk_deposit(deposit_id,client_name,dt,amount) values(6,'Растрелли',to_date('10.01.2012','dd.mm.yyyy'),1100000);

 

Напишем заголовок пакета:

CREATE OR REPLACE PACKAGE KK_PKG33 IS

FUNCTION GET_LAST_DEPOSIT_DATE(IN_CLIENT_NAME IN VARCHAR2) RETURN DATE;

FUNCTION GET_SUM_ALL_DEPOSITS(IN_CLIENT_NAME IN VARCHAR2) RETURN NUMBER;

FUNCTION GET_SUM_LAST_2_DEPOSITS(IN_CLIENT_NAME IN VARCHAR2) RETURN NUMBER;



END KK_PKG33;

 

Напишем тело пакета:

CREATE OR REPLACE PACKAGE BODY KK_PKG33 IS

 

FUNCTION GET_LAST_DEPOSIT_DATE(IN_CLIENT_NAME IN VARCHAR2) RETURN DATE IS

RES DATE;

BEGIN

SELECT NVL(MAX(DT), TO_DATE('01.01.1900', 'DD.MM.YYYY'))

INTO RES

FROM KK_DEPOSIT

WHERE CLIENT_NAME = IN_CLIENT_NAME;

RETURN RES;

END GET_LAST_DEPOSIT_DATE;

 

FUNCTION GET_SUM_ALL_DEPOSITS(IN_CLIENT_NAME IN VARCHAR2) RETURN NUMBER IS

RES NUMBER;

BEGIN

SELECT NVL(SUM(AMOUNT), 0)

INTO RES

FROM KK_DEPOSIT

WHERE CLIENT_NAME = IN_CLIENT_NAME;

RETURN RES;

END GET_SUM_ALL_DEPOSITS;

 

FUNCTION GET_SUM_LAST_2_DEPOSITS(IN_CLIENT_NAME IN VARCHAR2) RETURN NUMBER IS

RES NUMBER;

BEGIN

SELECT NVL(SUM(AMOUNT), 0)

INTO RES

FROM (SELECT AMOUNT, ROW_NUMBER() OVER(ORDER BY DT DESC) RN

FROM KK_DEPOSIT

WHERE CLIENT_NAME = IN_CLIENT_NAME)

WHERE RN IN (1, 2);

RETURN RES;

END GET_SUM_LAST_2_DEPOSITS;

 

END KK_PKG33;

 

Проверим результат:

SELECT CLIENT_NAME,

KK_PKG33.GET_LAST_DEPOSIT_DATE(CLIENT_NAME),

KK_PKG33.GET_SUM_ALL_DEPOSITS(CLIENT_NAME),

KK_PKG33.GET_SUM_LAST_2_DEPOSITS(CLIENT_NAME)

FROM (SELECT DISTINCT CLIENT_NAME

FROM KK_DEPOSIT

UNION ALL

SELECT 'Несуществующий' CLIENT_NAME FROM DUAL);



<== предыдущая лекция | следующая лекция ==>
Создать таблицу KK_SALARY(NAME varchar2(50), DT date, WAGE number) и внести туда данные об изменении зарплаты сотрудников. | Написать запрос о том, какой процесс в какое время начинался, в какое время заканчивался и сколько секунд работал.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.132 сек.