Skip to content

Instantly share code, notes, and snippets.

@talhahasanzia
Created March 24, 2020 10:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save talhahasanzia/8650e676db1b61377dd4fee4aa7b538b to your computer and use it in GitHub Desktop.
Save talhahasanzia/8650e676db1b61377dd4fee4aa7b538b to your computer and use it in GitHub Desktop.
Sql procedures and functions
// -----------------------------------------------------//
// CREATION OF SCHEMA
// -----------------------------------------------------//
CREATE TABLE IF NOT EXISTS user_permissions (
id int NOT NULL,
permission_name varchar(50) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS user_roles (
id int NOT NULL,
user_role varchar(50) NOT NULL,
perm_id int,
PRIMARY KEY (id),
FOREIGN KEY (perm_id) REFERENCES user_permissions(id)
);
CREATE TABLE IF NOT EXISTS user_table(
id int NOT NULL,
name varchar(255),
age int,
city varchar(255),
role_id int,
primary KEY(id),
FOREIGN KEY (role_id) REFERENCES user_roles(id)
);
// -----------------------------------------------------//
// PROCEDURES
// -----------------------------------------------------//
CREATE or replace PROCEDURE createUser(name varchar(250), age integer, city varchar(250), roleName varchar(250), permissions varchar(250))
as $$
declare
tempVar integer;
userId integer ;
begin
select count(*) into tempVar from user_roles where user_role = roleName;
if tempVar = 0 then
exec createRole(roleName, permissions);
end if
select id into tempVar from user_roles where user_role = roleName;
userId = generateId(user_data)
insert into user_data values (userId,name, age, city, tempVar )
commit;
END;
$$
CREATE or REPLACE PROCEDURE createRole(roleName varchar(250), permissions varchar(250))
as $$
declare
tempVar integer;
roleId integer ;
begin
select count(*) into tempVar from user_permissions where user_permissions.permission_name = permissions;
if tempVar = 0 then
exec createPermission(permissions);
end if
select id into tempVar from user_permissions where permissions.permission_name = permissions;
roleId = generateId(user_roles)
insert into user_roles values (roleId, roleName, tempVar )
END;
$$
create or replace PROCEDURE createPermission(permissions varchar(250))
as $$
declare
permId integer ;
begin
permId = generateId(user_permissions)
insert into user_permissions values (permId, permissions )
END;
$$
create or replace function generateId(table_name varchar(250))
return integer
as record_count integer := 0;
begin
record_count = (select count(*) from table_name) + 1;
return record_count;
end
LANGUAGE plpgsql
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment