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

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

21.05.2020, 23:16. Показов 4394. Ответов 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
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
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
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
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
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
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
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru