This repository has been archived on 2025-12-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2024-09-20 14:17:13 +03:00

56 lines
1.7 KiB
PL/PgSQL

-- a) Create the following roles: user, manager, owner. Grant all privileges to owner, read privileges to user, and insert privileges to manager.
CREATE ROLE "user";
CREATE ROLE manager;
CREATE ROLE "owner";
GRANT ALL PRIVILEGES ON DATABASE TO "owner";
GRANT SELECT ON DATABASE TO "user";
GRANT INSERT ON DATABASE TO manager;
-- b) Create a new role: trainee. Grant privileges only to columns orderdate and shippeddate to trainee and set the role valid until 30.5.2022.
CREATE ROLE trainee;
GRANT ALL PRIVILEGES (orderdate,shippeddate) ON orders TO trainee;
ALTER ROLE trainee VALID UNTIL '30.05.2022.';
-- c) Create a function get_shipping_info(varchar) that returns a table.
-- The table should have the following columns shipname, shipaddress, shipcity, shipcountry.
-- The function should return orders where the shipname matches the given string.
CREATE OR REPLACE FUNCTION get_shipping_info(inp varchar(40))
RETURNS TABLE (
shipname VARCHAR(40),
shipaddress VARCHAR(60),
shipcity VARCHAR(15),
shipcountry VARCHAR(15)
)
LANGUAGE PLPGSQL
AS $$
BEGIN
RETURN QUERY SELECT
orders.shipname, orders.shipaddress, orders.shipcity, orders.shipcountry
FROM
orders
WHERE
orders.shipname=inp;
END;
$$;
-- d)
CREATE OR REPLACE FUNCTION get_shipping_info(inp varchar, tim timestamp, cash money)
RETURNS TABLE (
shipname VARCHAR(40),
shipaddress VARCHAR(60),
shipcity VARCHAR(15),
shipcountry VARCHAR(15)
)
LANGUAGE PLPGSQL
AS $$
BEGIN
RETURN QUERY SELECT
orders.shipname, orders.shipaddress, orders.shipcity, orders.shipcountry
FROM
orders
WHERE
orders.shipname=inp
AND orders.orderdate>=tim
AND orders.freight BETWEEN (cash::numeric-10)::money AND (cash::numeric+10)::money;
END;
$$;