56 lines
1.7 KiB
PL/PgSQL
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;
|
|
$$; |