Created
March 24, 2020 10:50
-
-
Save talhahasanzia/8650e676db1b61377dd4fee4aa7b538b to your computer and use it in GitHub Desktop.
Sql procedures and functions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// -----------------------------------------------------// | |
// 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