Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 21.05.2020
Сообщений: 1

Создание функций

21.05.2020, 23:16. Показов 4359. Ответов 8

Студворк — интернет-сервис помощи студентам
Добрый день!

Подскажите, пожалуйста, как создать функции для БД Гостиницы?

1. Функция, возвращающая количество дней, прожитых постояльцем в гостинице на
основании двух дат (день приезда – день отъезда считать как один день). Если второй
параметр не передается, считать до текущей даты.

2. Функция подготовки счёта клиенту за предоставленные услуги. Функция помещает
данные счета в таблицу «Счет» с полями: ФИО клиента, дата оказания услуги,
количество, стоимость. Учитываются предоставленные услуги и проживание. Параметр –
номер паспорта клиента. Если в один день клиенту было оказано несколько одинаковых
услуг, выводить их одной строкой, указывая количество. Функция предварительно
должна очищать таблицу Счет. Последняя добавляемая строка: ФИО, дата вселения, дата
выезда, общая стоимость. Использовать ранее созданную функцию.

Таблицы:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
CREATE TABLE room_classes
(
class NUMERIC(1) CHECK (class IN (1, 2, 3, 4, 5)) CONSTRAINT pk_class PRIMARY KEY,
cost  NUMERIC(9) NOT NULL
);
 
CREATE TABLE rooms
(
r_id NUMERIC(4) UNIQUE CONSTRAINT pk_r_id PRIMARY KEY,
r_class NUMERIC(1) NOT NULL REFERENCES room_classes(class),
r_seats_number NUMERIC(1) NOT NULL
);
 
CREATE TABLE services
(
s_name VARCHAR(30) CONSTRAINT pk_s_name PRIMARY KEY,
s_description VARCHAR(100) NOT NULL,
s_cost NUMERIC(7) NOT NULL
);
 
CREATE TABLE guests
(
g_passport CHAR(10) NOT NULL,
g_check_in_date DATE NOT NULL,
g_occupied_room NUMERIC(4) NOT NULL REFERENCES rooms(r_id),
g_name VARCHAR(40) NOT NULL,
g_sex CHAR NOT NULL CHECK (g_sex IN ('м', 'ж')) DEFAULT 'м',
g_organization VARCHAR(40),
g_departure_date DATE,
g_sign NUMERIC(1) NOT NULL CHECK (g_sign IN (0, 1, 2)),
CONSTRAINT pk_guest PRIMARY KEY(g_passport, g_check_in_date)
);
 
CREATE TABLE provided_services
(
pr_pass CHAR(10),
pr_date DATE,
FOREIGN KEY(pr_pass, pr_date) REFERENCES guests(g_passport, g_check_in_date),
pr_service VARCHAR(30) REFERENCES services(s_name),
pr_quantity NUMERIC(1) NOT NULL,
pr_cost NUMERIC(7) NOT NULL,
pr_provision_date DATE
);
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2020, 23:16
Ответы с готовыми решениями:

Создание Функций и триггеров
Доброго времени суток. Сегодня приступила к созданию скалярных функций и триггеров, ни то, ни другое не получилось, где-то да ошибка. Буду...

Создание функций, ветвлений, хранимых процедур и циклов в sqllite
SQLite поддерживает "функционал MySQL" создания функций, ветвлений, хранимых процедур и циклов?

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

8
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
22.05.2020, 22:50
Лучший ответ Сообщение было отмечено Lidi2800 как решение

Решение

Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
 CREATE FUNCTION  get_day_lived(date_from TIMESTAMP WITH timezone, date_to TIMESTAMP WITH timezone)
returns INTEGER
language plpgsql
AS $$
BEGIN
....
SELECT ...
RETURN ..
END;
$$;
Каркас функции вот. Сначала начните с написания простых запросов, которые реализуют элементарные действия ваших заданий. После этого сможете обернуть в функции.
1
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 10
27.05.2020, 11:10
Коллеги, добрый день. Пришлось перепрыгивать с firebird на postgre.
столкнулся с проблемами написания функций.
Задача
1. создать функцию возвращающую таблицу (2 поля - ID,Имя)
2. последней строкой таблицы должна быть запись со значениями 0,'Все'

пока не очень вникну в специфику - очень сложно
посмотрите на код моей функции - она выдает данные, но без нужной последней записи

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE OR REPLACE FUNCTION db."USR_BY_HID"(IN hid BOOLEAN)
  RETURNS TABLE(uid INTEGER, uname text) AS
$BODY$
BEGIN
RETURN QUERY
    SELECT "UID", "UFIRSTNAME" || ' ' || 
        LEFT("USECONDNAME",1) || '. ' || 
        LEFT("UTHIRDNAME",1) || '.' AS UNAME
    FROM db."TBLUSER"
    WHERE "UISHIDEN"=hid;
"uid"=0;
"uname"='Все';
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000;
ALTER FUNCTION db."USR_BY_HID"(BOOLEAN)
  OWNER TO postgres;

p.s. Пользуюсь pgAdmin. если честно, то не доволен. что можете предложить в качестве альтернативы?
Заранее благодарен
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
27.05.2020, 16:24
SQL
1
2
3
4
5
6
7
8
9
10
BEGIN
RETURN QUERY
SELECT "UID", "UFIRSTNAME" || ' ' ||
LEFT("USECONDNAME",1) || '. ' ||
LEFT("UTHIRDNAME",1) || '.' AS UNAME
FROM db."TBLUSER"
WHERE "UISHIDEN"=hid
UNION ALL
SELECT 0, 'Все';
END
0
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 10
27.05.2020, 22:54
Долго ковырялся, и удалось добиться нужного результата вот такой конструкцией.

В каком текстовом редакторе вы выкладываете код?
Миниатюры
Создание функций  
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
28.05.2020, 08:41
Цитата Сообщение от _r_m_b_ Посмотреть сообщение
В каком текстовом редакторе вы выкладываете код?
Ни в каком. Сайтом поддерживаются BB-коды для форматирования сообщений.
Ссылка на справку
0
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 10
28.05.2020, 11:29
RETURN QUERY сразу возвращает таблицу?
есть возможность в функции пройтись по этой таблице?
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
28.05.2020, 22:10
Цитата Сообщение от _r_m_b_ Посмотреть сообщение
RETURN QUERY сразу возвращает таблицу?
технически нет.
по RETURN QUERY сначала формируется промежуточный блок данных - собственно результат возврата данных.
После того как полный объем сформирован, по окончанию функцию, она начинает отдавать подготовленный результат.
Поэтому надо быть аккуратными с такими функциями, если они возвращают миллионы строк - это сильно ударит по производительности.

Цитата Сообщение от _r_m_b_ Посмотреть сообщение
есть возможность в функции пройтись по этой таблице?
например так должно сработать.
Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
DECLARE 
    r RECORD;
BEGIN
     FOR r IN(SELECT "UID", "UFIRSTNAME" || ' ' ||
left("USECONDNAME",1) || '. ' ||
left("UTHIRDNAME",1) || '.' AS UNAME
FROM db."TBLUSER"
WHERE "UISHIDEN"=hid)  LOOP
            UID := r."UID" ; uname := r.uname;
            RETURN NEXT;
     END LOOP;
END;
1
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 10
29.05.2020, 08:42
Спасибо, это то, что надо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.05.2020, 08:42
Помогаю со студенческими работами здесь

Создание функций в C#
Здравствуйте. Пропустил семинарское занятие в вузе, в итоге не могу разобраться с данной темой. Пролистал учебник C# 4.0 Шилдта, не...

создание функций
Всем привет.Объясните кто нибудь как создать функцию которая будет выдавать несколько выходных значений.Вот пример моей функции,я так...

создание функций
Добрый день всем!! пожалуйста помогите с программкой, нужно написать (За один просмотр одномерного массива заменить все его элементы с...

Создание функций
есть скрипт <?PHP ........... $head = makeHead(); $body = makeBody(); $html = $head.$body;

Создание функций
есть функция авторизации, находится на сервере она. В неё передается логин пароль, проверяется, возвращается табличное значение. Так вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru