Sunteți pe pagina 1din 15

CREATE TABLE addresses (

id INTEGER NOT NULL,


postal_code VARCHAR2(50 CHAR) NOT NULL,
city_id INTEGER NOT NULL,
line_1 VARCHAR2(200 CHAR) NOT NULL,
line_2 VARCHAR2(200 CHAR),
created_at DATE,
updated_at DATE,
deleted_at DATE
);

ALTER TABLE addresses ADD CONSTRAINT addresses_pk PRIMARY KEY ( id );

CREATE TABLE cities (


id INTEGER NOT NULL,
name VARCHAR2(55 CHAR) NOT NULL,
created_at DATE,
updated_at DATE,
deleted_at DATE
);

ALTER TABLE cities ADD CONSTRAINT cities_pk PRIMARY KEY ( id );

ALTER TABLE cities ADD CONSTRAINT cities_name_un UNIQUE ( name );

CREATE TABLE files (


id INTEGER NOT NULL,
original_name VARCHAR2(55 CHAR) NOT NULL,
name VARCHAR2(55 CHAR) NOT NULL,
path VARCHAR2(200 CHAR) NOT NULL,
space_on_disk NUMBER NOT NULL,
created_at DATE,
updated_at DATE,
deleted_at DATE
);

ALTER TABLE files ADD CONSTRAINT files_pk PRIMARY KEY ( id );

CREATE TABLE postfiles (


post_id INTEGER NOT NULL,
file_id INTEGER NOT NULL
);

ALTER TABLE postfiles ADD CONSTRAINT postfiles_pk PRIMARY KEY ( post_id,


file_id );

CREATE TABLE posts (


id INTEGER NOT NULL,
task_id INTEGER NOT NULL,
"comment" CLOB NOT NULL,
created_at DATE,
updated_at DATE,
deleted_at DATE
);

ALTER TABLE posts ADD CONSTRAINT posts_pk PRIMARY KEY ( id );

CREATE TABLE project_teams (


project_id INTEGER NOT NULL,
team_id INTEGER NOT NULL
);

ALTER TABLE project_teams ADD CONSTRAINT project_teams_pk PRIMARY KEY ( project_id,


team_id );

CREATE TABLE projects (


id INTEGER NOT NULL,
manager_id INTEGER NOT NULL,
name VARCHAR2(50 CHAR) NOT NULL,
status VARCHAR2(50 CHAR),
description CLOB,
due_on DATE,
created_at DATE,
updated_at DATE,
deleted_at DATE
);

ALTER TABLE projects ADD CONSTRAINT projects_pk PRIMARY KEY ( id );

CREATE TABLE role_users (


role_id INTEGER NOT NULL,
user_id INTEGER NOT NULL
);

ALTER TABLE role_users ADD CONSTRAINT role_users_pk PRIMARY KEY ( role_id,


user_id );

CREATE TABLE roles (


id INTEGER NOT NULL,
name VARCHAR2(50 CHAR) NOT NULL,
created_at DATE,
updated_at DATE,
deleted_at DATE
);

ALTER TABLE roles ADD CONSTRAINT roles_pk PRIMARY KEY ( id );

CREATE TABLE subtasks (


id INTEGER NOT NULL,
user_id INTEGER NOT NULL
);

ALTER TABLE subtasks ADD CONSTRAINT subtasks_pk PRIMARY KEY ( id );

CREATE TABLE task_files (


file_id INTEGER NOT NULL,
task_id INTEGER NOT NULL
);

ALTER TABLE task_files ADD CONSTRAINT task_files_pk PRIMARY KEY ( file_id,


task_id );

CREATE TABLE tasks (


id INTEGER NOT NULL,
project_id INTEGER NOT NULL,
name VARCHAR2(50 CHAR) NOT NULL,
status VARCHAR2(50 CHAR),
description CLOB,
due_on DATE,
created_at DATE,
updated_at DATE,
deleted_at DATE
);

ALTER TABLE tasks ADD CONSTRAINT tasks_pk PRIMARY KEY ( id );

CREATE TABLE teams (


id INTEGER NOT NULL,
leader_id INTEGER NOT NULL,
name VARCHAR2(55 CHAR) NOT NULL,
created_at DATE,
updated_at DATE,
deleted_at DATE
);

ALTER TABLE teams ADD CONSTRAINT teams_pk PRIMARY KEY ( id );

CREATE TABLE teamtasks (


id INTEGER NOT NULL,
team_id INTEGER NOT NULL
);

ALTER TABLE teamtasks ADD CONSTRAINT teamtasks_pk PRIMARY KEY ( id );

CREATE TABLE teamusers (


user_id INTEGER NOT NULL,
team_id INTEGER NOT NULL
);

ALTER TABLE teamusers ADD CONSTRAINT teamusers_pk PRIMARY KEY ( user_id,


team_id );

CREATE TABLE userprofiles (


id INTEGER NOT NULL,
profile_picture_id INTEGER,
description CLOB,
hobbies CLOB,
created_at DATE,
updated_at DATE,
deleted_at DATE
);

CREATE UNIQUE INDEX userprofiles__idx ON


userprofiles (
profile_picture_id
ASC );

ALTER TABLE userprofiles ADD CONSTRAINT userprofiles_pk PRIMARY KEY ( id );

CREATE TABLE users (


id INTEGER NOT NULL,
address_id INTEGER NOT NULL,
profile_id INTEGER NOT NULL,
first_name VARCHAR2(50 BYTE) NOT NULL,
last_name VARCHAR2(50 CHAR) NOT NULL,
email VARCHAR2(55 CHAR) NOT NULL,
password VARCHAR2(50 BYTE) NOT NULL,
email_verified_at DATE,
updated_at DATE,
created_at DATE,
deleted_at DATE
);

CREATE UNIQUE INDEX users__idx ON


users (
address_id
ASC );

CREATE UNIQUE INDEX users__idxv1 ON


users (
profile_id
ASC );

ALTER TABLE users ADD CONSTRAINT users_pk PRIMARY KEY ( id );

ALTER TABLE users ADD CONSTRAINT users_email_un UNIQUE ( email );

ALTER TABLE addresses


ADD CONSTRAINT addresses_cities_fk FOREIGN KEY ( city_id )
REFERENCES cities ( id );

ALTER TABLE postfiles


ADD CONSTRAINT postfiles_files_fk FOREIGN KEY ( file_id )
REFERENCES files ( id );

ALTER TABLE postfiles


ADD CONSTRAINT postfiles_posts_fk FOREIGN KEY ( post_id )
REFERENCES posts ( id );

ALTER TABLE posts


ADD CONSTRAINT posts_tasks_fk FOREIGN KEY ( task_id )
REFERENCES tasks ( id );

ALTER TABLE project_teams


ADD CONSTRAINT project_teams_projects_fk FOREIGN KEY ( project_id )
REFERENCES projects ( id );

ALTER TABLE project_teams


ADD CONSTRAINT project_teams_teams_fk FOREIGN KEY ( team_id )
REFERENCES teams ( id );

ALTER TABLE projects


ADD CONSTRAINT projects_users_fk FOREIGN KEY ( manager_id )
REFERENCES users ( id );

ALTER TABLE role_users


ADD CONSTRAINT role_users_roles_fk FOREIGN KEY ( role_id )
REFERENCES roles ( id );

ALTER TABLE role_users


ADD CONSTRAINT role_users_users_fk FOREIGN KEY ( user_id )
REFERENCES users ( id );

ALTER TABLE subtasks


ADD CONSTRAINT subtasks_tasks_fk FOREIGN KEY ( id )
REFERENCES tasks ( id );
ALTER TABLE subtasks
ADD CONSTRAINT subtasks_users_fk FOREIGN KEY ( user_id )
REFERENCES users ( id );

ALTER TABLE task_files


ADD CONSTRAINT task_files_files_fk FOREIGN KEY ( file_id )
REFERENCES files ( id );

ALTER TABLE task_files


ADD CONSTRAINT task_files_tasks_fk FOREIGN KEY ( task_id )
REFERENCES tasks ( id );

ALTER TABLE tasks


ADD CONSTRAINT tasks_projects_fk FOREIGN KEY ( project_id )
REFERENCES projects ( id );

ALTER TABLE teams


ADD CONSTRAINT teams_users_fk FOREIGN KEY ( leader_id )
REFERENCES users ( id );

ALTER TABLE teamtasks


ADD CONSTRAINT teamtasks_tasks_fk FOREIGN KEY ( id )
REFERENCES tasks ( id );

ALTER TABLE teamtasks


ADD CONSTRAINT teamtasks_teams_fk FOREIGN KEY ( team_id )
REFERENCES teams ( id );

ALTER TABLE teamusers


ADD CONSTRAINT teamusers_teams_fk FOREIGN KEY ( team_id )
REFERENCES teams ( id );

ALTER TABLE teamusers


ADD CONSTRAINT teamusers_users_fk FOREIGN KEY ( user_id )
REFERENCES users ( id );

ALTER TABLE userprofiles


ADD CONSTRAINT userprofiles_files_fk FOREIGN KEY ( profile_picture_id )
REFERENCES files ( id );

ALTER TABLE users


ADD CONSTRAINT users_addresses_fk FOREIGN KEY ( address_id )
REFERENCES addresses ( id );

ALTER TABLE users


ADD CONSTRAINT users_userprofiles_fk FOREIGN KEY ( profile_id )
REFERENCES userprofiles ( id );

CREATE OR REPLACE PROCEDURE CREATE_SEQUENCE_IF_NEEDED (MY_SEQUENCE VARCHAR2) IS


seq_count NUMBER := 0;
BEGIN
SELECT count(1)
INTO seq_count
FROM user_sequences
WHERE UPPER(sequence_name) = UPPER(my_sequence);

IF seq_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE SEQUENCE ' || UPPER(my_sequence) || ' START WITH
1 MINVALUE 1 MAXVALUE 1000000000000000 INCREMENT BY 1';
END IF;
END CREATE_SEQUENCE_IF_NEEDED;
/

BEGIN
CREATE_SEQUENCE_IF_NEEDED('cities_sequence');
CREATE_SEQUENCE_IF_NEEDED('addresses_sequence');
CREATE_SEQUENCE_IF_NEEDED('profile_sequence');
CREATE_SEQUENCE_IF_NEEDED('files_sequence');
CREATE_SEQUENCE_IF_NEEDED('roles_sequence');
CREATE_SEQUENCE_IF_NEEDED('users_sequence');
CREATE_SEQUENCE_IF_NEEDED('teams_sequence');
CREATE_SEQUENCE_IF_NEEDED('projects_sequence');
CREATE_SEQUENCE_IF_NEEDED('tasks_sequence');
END;
/

CREATE OR REPLACE TRIGGER cities_created_at


BEFORE INSERT ON cities
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT cities_sequence.NEXTVAL
INTO :NEW.ID
FROM dual;
END IF;

:NEW.CREATED_AT := CURRENT_DATE;
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The city ' || :NEW.NAME || ' has been inserted. The
created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER cities_updated_at


BEFORE UPDATE ON cities
FOR EACH ROW
BEGIN
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The city ' || :NEW.NAME || ' has been updated. The
created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER projects_created_at


BEFORE INSERT ON projects
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT projects_sequence.NEXTVAL
INTO :NEW.ID
FROM dual;
END IF;

:NEW.CREATED_AT := CURRENT_DATE;
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The project ' || :NEW.NAME || ' has been inserted. The
created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER projects_updated_at


BEFORE UPDATE ON projects
FOR EACH ROW
BEGIN
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The project ' || :NEW.NAME || ' has been updated. The
created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER teams_created_at


BEFORE INSERT ON teams
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT teams_sequence.NEXTVAL
INTO :NEW.ID
FROM dual;
END IF;

:NEW.CREATED_AT := CURRENT_DATE;
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The team ' || :NEW.NAME || ' has been inserted. The
created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER teams_updated_at


BEFORE UPDATE ON teams
FOR EACH ROW
BEGIN
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The team ' || :NEW.NAME || ' has been updated. The
created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER profiles_created_at


BEFORE INSERT ON userprofiles
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT profile_sequence.NEXTVAL
INTO :NEW.ID
FROM dual;
END IF;

:NEW.CREATED_AT := CURRENT_DATE;
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The profile ' || :NEW.ID || ' has been inserted. The
created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER profiles_updated_at


BEFORE UPDATE ON userprofiles
FOR EACH ROW
BEGIN
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The profile ' || :NEW.ID || ' has been updated. The
created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER files_created_at


BEFORE INSERT ON files
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT files_sequence.NEXTVAL
INTO :NEW.ID
FROM dual;
END IF;

:NEW.CREATED_AT := CURRENT_DATE;
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The file ' || :NEW.ORIGINAL_NAME || ' has been inserted.
The created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER files_updated_at


BEFORE UPDATE ON files
FOR EACH ROW
BEGIN
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The file ' || :NEW.ORIGINAL_NAME || ' has been updated.
The created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER roles_created_at


BEFORE INSERT ON roles
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT roles_sequence.NEXTVAL
INTO :NEW.ID
FROM dual;
END IF;

:NEW.CREATED_AT := CURRENT_DATE;
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The role ' || :NEW.NAME || ' has been inserted. The
created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER roles_updated_at


BEFORE UPDATE ON roles
FOR EACH ROW
BEGIN
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The file ' || :NEW.NAME || ' has been updated. The
created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER users_created_at


BEFORE INSERT ON users
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT users_sequence.NEXTVAL
INTO :NEW.ID
FROM dual;
END IF;

:NEW.CREATED_AT := CURRENT_DATE;
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The user ' || :NEW.FIRST_NAME || ' ' || :NEW.LAST_NAME ||
' has been inserted. The created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER users_updated_at


BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
:NEW.UPDATED_AT := CURRENT_DATE;

UPDATE teamusers SET user_id = :NEW.id where user_id = :OLD.ID;


UPDATE role_users SET user_id = :NEW.id where user_id = :OLD.ID

dbms_output.put_line('The user ' || :NEW.FIRST_NAME || ' ' || :NEW.LAST_NAME


|| ' has been updated. The created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER addresses_created_at


BEFORE INSERT ON addresses
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT addresses_sequence.NEXTVAL
INTO :NEW.ID
FROM dual;
END IF;

:NEW.CREATED_AT := CURRENT_DATE;
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The address ' || :NEW.POSTAL_CODE || ' has been inserted.
The created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER addresses_updated_at


BEFORE UPDATE ON addresses
FOR EACH ROW
BEGIN
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The address ' || :NEW.POSTAL_CODE || ' has been updated.
The created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER tasks_created_at


BEFORE INSERT ON tasks
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT tasks_sequence.NEXTVAL
INTO :NEW.ID
FROM dual;
END IF;

:NEW.CREATED_AT := CURRENT_DATE;
:NEW.UPDATED_AT := CURRENT_DATE;
dbms_output.put_line('The task ' || :NEW.name || ' has been inserted. The
created/updated at fields have been updated');
END;
/

CREATE OR REPLACE TRIGGER tasks_updated_at


AFTER UPDATE ON tasks
FOR EACH ROW
DECLARE
CURSOR projects_cursor IS
SELECT count(*), project_id
FROM tasks
WHERE status != 'finished'
GROUP BY project_id;
amount NUMBER;
project_id NUMBER;
BEGIN
:NEW.UPDATED_AT := CURRENT_DATE;

OPEN projects_cursor;
LOOP
FETCH projects_cursor INTO amount, project_id;
IF amount = 0
THEN
UPDATE projects set status = 'finished' where id = project_id;
END IF;
END LOOP;
CLOSE projects_cursor;

dbms_output.put_line('The task ' || :NEW.name || ' has been updated. The


created/updated at fields have been updated');
END;
/

CREATE OR REPLACE PROCEDURE SEED_CITIES(amount number) IS


BEGIN
INSERT INTO cities(name)
SELECT 'City ' || to_char(ROWNUM)
FROM dual
CONNECT BY LEVEL <= amount;
END SEED_CITIES;
/
CREATE OR REPLACE PROCEDURE SEED_ADDRESSES IS
cursor_id cities.id%type;
CURSOR cities_cursor is
SELECT id
FROM cities
ORDER BY DBMS_RANDOM.VALUE;
BEGIN
OPEN cities_cursor;
LOOP
FETCH cities_cursor INTO cursor_id;
EXIT WHEN cities_cursor%notfound;

INSERT INTO addresses(postal_code, city_id, line_1, line_2)


SELECT 'postal_code_' || cursor_id || '_' || to_char(ROWNUM),
cursor_id, DBMS_RANDOM.string('a',10), DBMS_RANDOM.string('a',10)
FROM dual
CONNECT BY LEVEL <= DBMS_RANDOM.VALUE(5,25);

END LOOP;
CLOSE cities_cursor;

END SEED_ADDRESSES;
/

CREATE OR REPLACE PROCEDURE SEED_ROLES IS


BEGIN
INSERT INTO roles(name) values('Member');
INSERT INTO roles(name) values('Administrator');
INSERT INTO roles(name) values('Team leader');
INSERT INTO roles(name) values('Project manager');
END SEED_ROLES;
/

CREATE OR REPLACE PROCEDURE SEED_USERS(role VARCHAR2, amount NUMBER) IS


CURSOR address_cursor is
SELECT id
FROM addresses
ORDER BY DBMS_RANDOM.VALUE;
profile_id NUMBER;
address_id NUMBER;
user_id NUMBER;
role_id NUMBER;
CURSOR role_cursor is
SELECT id
FROM roles
WHERE name = role;
BEGIN
OPEN address_cursor;
OPEN role_cursor;
FETCH role_cursor into role_id;

FOR i IN 1..amount
LOOP
INSERT INTO userprofiles(description, hobbies)
values(DBMS_RANDOM.string('a',25), DBMS_RANDOM.string('a',25));

SELECT profile_sequence.CURRVAL INTO profile_id FROM DUAL;


FETCH address_cursor INTO address_id;

INSERT into users(address_id, profile_id, first_name, last_name, email,


password)
values(address_id, profile_id, DBMS_RANDOM.string('a',5),
DBMS_RANDOM.string('a',5), DBMS_RANDOM.string('a',5), DBMS_RANDOM.string('a',25))
RETURNING id into user_id;

INSERT into role_users(role_id, user_id) values(role_id, user_id);


END LOOP;

CLOSE address_cursor;
CLOSE role_cursor;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An error occurred.');
END SEED_USERS;
/

CREATE OR REPLACE PROCEDURE SEED_TEAMS IS


CURSOR leaders_cursor IS
SELECT users.id
FROM users
INNER JOIN role_users on users.id = role_users.user_id
INNER JOIN roles on role_users.role_id = roles.id
WHERE roles.name = 'Team leader';
CURSOR members_cursor IS
SELECT users.id
FROM users
INNER JOIN role_users on users.id = role_users.user_id
INNER JOIN roles on role_users.role_id = roles.id
WHERE roles.name = 'Member';
leader_id NUMBER;
member_id NUMBER;
members_amount NUMBER;
leaders_amount NUMBER;
member_per_team NUMBER;
current_team_id NUMBER;
record_exists NUMBER;
BEGIN
SELECT count(*) INTO leaders_amount
FROM users
INNER JOIN role_users on users.id = role_users.user_id
INNER JOIN roles on role_users.role_id = roles.id
WHERE roles.name = 'Team leader';

SELECT count(*) INTO members_amount


FROM users
INNER JOIN role_users on users.id = role_users.user_id
INNER JOIN roles on role_users.role_id = roles.id
WHERE roles.name = 'Member';

member_per_team := (members_amount + leaders_amount) / (leaders_amount + 1);

OPEN leaders_cursor;

LOOP
FETCH leaders_cursor into leader_id;
EXIT WHEN leaders_cursor%notfound;
INSERT INTO TEAMS(name,leader_id)
VALUES(DBMS_RANDOM.string('a',10), leader_id)
RETURNING ID INTO current_team_id;

OPEN members_cursor;

FOR i in 1..member_per_team
LOOP
FETCH members_cursor into member_id;

SELECT count(*) INTO record_exists


FROM teamusers
WHERE team_id = current_team_id
AND user_id = member_id;

IF record_exists = 0
THEN
INSERT INTO teamusers(team_id, user_id)
values(current_team_id, member_id);
END IF;
END LOOP;

CLOSE members_cursor;
END LOOP;

CLOSE leaders_cursor;
END SEED_TEAMS;
/

CREATE OR REPLACE PROCEDURE SEED_PROJECTS IS


manager_id NUMBER;
current_project NUMBER;
team_id NUMBER;
CURSOR project_managers IS
SELECT users.id
FROM users
INNER JOIN role_users on users.id = role_users.user_id
INNER JOIN roles on role_users.role_id = roles.id
WHERE roles.name = 'Project manager';
BEGIN
OPEN project_managers;
LOOP
FETCH project_managers INTO manager_id;
INSERT INTO projects(manager_id, name, description)
values(manager_id, DBMS_RANDOM.string('a',10),
DBMS_RANDOM.string('a',25))
RETURNING id into current_project;

FOR team IN (SELECT id from teams ORDER BY DBMS_RANDOM.VALUE FETCH NEXT


3 ROWS ONLY)
LOOP
INSERT INTO project_teams(project_id, team_id)
values(current_project, team.id);
END LOOP;
END LOOP;
CLOSE project_managers;

END SEED_PROJECTS;
/

CREATE OR REPLACE PROCEDURE INITIAL_SEEDING IS


BEGIN
DELETE FROM project_teams;
DELETE FROM projects;
DELETE FROM teamusers;
DELETE FROM teams;
DELETE FROM role_users;
DELETE FROM roles;
DELETE FROM users;
DELETE FROM userprofiles;
DELETE FROM files;
DELETE from addresses;
DELETE from cities;

SEED_CITIES(5);
SEED_ADDRESSES();
SEED_ROLES();
SEED_USERS('Project manager', 3);
SEED_USERS('Member', 10);
SEED_USERS('Administrator', 2);
SEED_USERS('Team leader', 2);

SEED_TEAMS();
SEED_PROJECTS();
END INITIAL_SEEDING;
/

BEGIN
INITIAL_SEEDING();
END;
/

CREATE OR REPLACE TRIGGER modificare_proiect


BEFORE UPDATE ON projects
DECLARE
weekend EXCEPTION;
in_afara_programului EXCEPTION;
BEGIN
IF (TO_CHAR(Sysdate, 'DAY') = 'SAT' OR TO_CHAR(Sysdate, 'DAY') = 'SUN') THEN
RAISE weekend;
END IF;

IF (TO_CHAR(Sysdate, 'HH24') > 8 OR TO_CHAR(Sysdate, 'HH24') > 16) THEN


RAISE in_afara_programului;
END IF;

EXCEPTION
WHEN weekend THEN
Raise_application_error(-20001,'You are not allowed to update a project during
weekends');
WHEN in_afara_programului THEN
Raise_application_error(-20001,'You are not to allowed the update a project if
at this time');
END;
/
select * from PROJECTS;
select * from project_teams;

S-ar putea să vă placă și