0% found this document useful (0 votes)
3 views7 pages

db note

The document outlines the creation of database sequences, tables, triggers, and functions for managing users, tournaments, and organizers. It includes SQL commands for inserting data, updating records, and validating user credentials. Additionally, it features procedures for retrieving tournament organizers and calculating total tournament durations.

Uploaded by

Jamilur Reza
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
Download as txt, pdf, or txt
0% found this document useful (0 votes)
3 views7 pages

db note

The document outlines the creation of database sequences, tables, triggers, and functions for managing users, tournaments, and organizers. It includes SQL commands for inserting data, updating records, and validating user credentials. Additionally, it features procedures for retrieving tournament organizers and calculating total tournament durations.

Uploaded by

Jamilur Reza
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1/ 7

---------------------------------------------------------------------

CREATE SEQUENCE users_seq START WITH 1 INCREMENT BY 1;

CREATE TABLE users (


id NUMBER,
username VARCHAR2(100),
email VARCHAR2(100),
password VARCHAR2(100),
CONSTRAINT pk_users PRIMARY KEY (id)
);

CREATE OR REPLACE TRIGGER users_trigger


BEFORE INSERT ON users
FOR EACH ROW
BEGIN
SELECT users_seq.NEXTVAL INTO :new.id FROM dual;
END;

INSERT INTO users (id, username, email, password)


VALUES (2, 'rakib', 'rakib@gmail.com', '123123');

---------------------------------------------------------------------

CREATE SEQUENCE tournament_seq START WITH 1 INCREMENT BY 1;

CREATE TABLE Tournament (


tournament_id NUMBER,
tournament_name VARCHAR2(100),
tournament_date DATE,
tournament_type VARCHAR2(50),
CONSTRAINT pk_tournament PRIMARY KEY (tournament_id)
);

CREATE OR REPLACE TRIGGER tournament_trigger


BEFORE INSERT ON Tournament
FOR EACH ROW
BEGIN
SELECT tournament_seq.NEXTVAL INTO :new.tournament_id FROM dual;
END;

INSERT INTO Tournament ( tournament_name, tournament_date, tournament_type)


VALUES ('Pubg Tournament', TO_DATE('2024-07-10', 'YYYY-MM-DD'), 'Pubg');

INSERT INTO Tournament ( tournament_name, tournament_date, tournament_type)


VALUES ( 'Chess Tournament', TO_DATE('2024-04-20', 'YYYY-MM-DD'), 'Chess');

INSERT INTO Tournament (tournament_name, tournament_date, tournament_type)


VALUES ( 'Football Championship', TO_DATE('2024-05-15', 'YYYY-MM-DD'), 'Football');

INSERT INTO Tournament (tournament_name, tournament_date, tournament_type)


VALUES ( 'Football League', TO_DATE('2024-05-14', 'YYYY-MM-DD'), 'Football');

INSERT INTO Tournament ( tournament_name, tournament_date, tournament_type)


VALUES ( 'Basketball League', TO_DATE('2024-06-10', 'YYYY-MM-DD'), 'Basketball');

INSERT INTO Tournament ( tournament_name, tournament_date, tournament_type)


VALUES ('Pubg Tournament 2', TO_DATE('2024-07-10', 'YYYY-MM-DD'), 'Pubg');

---------------------------------------------------------------------

CREATE SEQUENCE organizer_seq START WITH 1 INCREMENT BY 1;

CREATE TABLE Organizer (


organizer_id NUMBER,
organizer_name VARCHAR2(100),
tournament_id NUMBER,
CONSTRAINT pk_organizer PRIMARY KEY (organizer_id),
CONSTRAINT fk_tournament_id FOREIGN KEY (tournament_id) REFERENCES
Tournament(tournament_id)
);

CREATE OR REPLACE TRIGGER organizer_trigger


BEFORE INSERT ON Organizer
FOR EACH ROW
BEGIN
SELECT organizer_seq.NEXTVAL INTO :new.organizer_id FROM dual;
END;

INSERT INTO Organizer ( organizer_name, tournament_id)


VALUES ( 'John Doe', 1);

INSERT INTO Organizer ( organizer_name, tournament_id)


VALUES ( 'Jane Smith', 5);

INSERT INTO Organizer ( organizer_name, tournament_id)


VALUES ( 'Michael Johnson', 1);

UPDATE Organizer
SET organizer_name = 'Jamil Reza', tournament_id = 3
WHERE organizer_id = 6;

-------------------------------------------------------------------------

CREATE TABLE info (


tournament_type VARCHAR2(50),
duration NUMBER,
tournament_id NUMBER,
CONSTRAINT fk_tournament FOREIGN KEY (tournament_id) REFERENCES
Tournament(tournament_id)
);

---------------------------------------------------------------------------

CREATE TABLE organizer_change_record (


organizer_id NUMBER,
old_organizer_name VARCHAR2(100),
new_organizer_name VARCHAR2(100),
old_tournament_id NUMBER,
new_tournament_id NUMBER,
change_date DATE
);

------------------------------------------------------------
TRIGGER
--------------------------------------------------------------
1

CREATE OR REPLACE TRIGGER insert_info_trigger


BEFORE INSERT ON info
FOR EACH ROW
BEGIN
SELECT tournament_type INTO :new.tournament_type
FROM Tournament
WHERE tournament_id = :new.tournament_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL; -- Do nothing if no matching tournament is found
END;

INSERT INTO info (tournament_id, duration)


VALUES (3, 100);

INSERT INTO info (tournament_id, duration)


VALUES (2, 60);

-----------------------------------------------------------------------------------

CREATE OR REPLACE TRIGGER organizer_update_trigger


BEFORE UPDATE ON Organizer
FOR EACH ROW
BEGIN
IF :OLD.organizer_name != :NEW.organizer_name OR :OLD.tournament_id !
= :NEW.tournament_id THEN
INSERT INTO organizer_change_record (organizer_id, old_organizer_name,
new_organizer_name, old_tournament_id, new_tournament_id, change_date)
VALUES
(:OLD.organizer_id, :OLD.organizer_name, :NEW.organizer_name, :OLD.tournament_id, :
NEW.tournament_id, SYSDATE);
END IF;
END;

-----------------------------------------------------------------------------------
----

CREATE OR REPLACE TRIGGER trg_check_organizer_tournament


BEFORE INSERT OR UPDATE ON ORGANIZER
FOR EACH ROW
DECLARE
v_tournament_count NUMBER;
BEGIN
IF :NEW.TOURNAMENT_ID IS NOT NULL THEN
SELECT COUNT(*) INTO v_tournament_count
FROM TOURNAMENT
WHERE TOURNAMENT_ID = :NEW.TOURNAMENT_ID;

IF v_tournament_count = 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'Invalid tournament ID. this tournament
id is not exist on the Tournament table so Cannot insert or update organizer.');
END IF;
END IF;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -20001 THEN
RAISE;
END IF;
END;

------------------------------------------------------------------

CREATE SEQUENCE tournament_seq START WITH 1 INCREMENT BY 1;

CREATE OR REPLACE TRIGGER tournament_trigger


BEFORE INSERT ON Tournament
FOR EACH ROW
BEGIN
SELECT tournament_seq.NEXTVAL INTO :new.tournament_id FROM dual;
END;
--------------------------------------------------
function
--------------------------------------------------
1. Retrieves information about a tournament based on the provided tournament ID.

CREATE OR REPLACE FUNCTION get_tournament_info(


p_tournament_id IN NUMBER
) RETURN VARCHAR2 AS
v_tournament_info VARCHAR2(500);
BEGIN
SELECT TOURNAMENT_NAME || ' - ' || TOURNAMENT_DATE || ' - ' || TOURNAMENT_TYPE
INTO v_tournament_info
FROM TOURNAMENT
WHERE TOURNAMENT_ID = p_tournament_id;

RETURN v_tournament_info;
END get_tournament_info;

SELECT get_tournament_info(123) AS tournament_info


FROM dual;

---------------------------------------------------------
2. Calculates the total duration of all tournaments.

CREATE OR REPLACE FUNCTION calculate_total_duration RETURN NUMBER AS


v_total_duration NUMBER := 0;
BEGIN
SELECT SUM(DURATION) INTO v_total_duration FROM INFO;
RETURN v_total_duration;
END calculate_total_duration;

SELECT calculate_total_duration() AS total_duration FROM dual;

------------------------------------------------------------
3. Validates user credentials by checking if the provided username and password
match any user in the database.
CREATE OR REPLACE FUNCTION validate_user_credentials(
p_username IN VARCHAR2,
p_password IN VARCHAR2
) RETURN BOOLEAN AS
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USERS
WHERE USERNAME = p_username
AND PASSWORD = p_password;

IF v_count > 0 THEN


RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END validate_user_credentials;

DECLARE
v_is_valid BOOLEAN;
BEGIN
v_is_valid := validate_user_credentials('rakib', '123123');
IF v_is_valid THEN
DBMS_OUTPUT.PUT_LINE('User credentials are valid');
ELSE
DBMS_OUTPUT.PUT_LINE('Invalid username or password');
END IF;
END;

-------------------------------------------------------
4. Retrieves organizers associated with a specific tournament and outputs their
names.

CREATE OR REPLACE PROCEDURE get_organizers_for_tournament(


p_tournament_id IN NUMBER
) AS
BEGIN
FOR organizer_rec IN (SELECT ORGANIZER_NAME FROM ORGANIZER WHERE TOURNAMENT_ID
= p_tournament_id) LOOP
DBMS_OUTPUT.PUT_LINE('Organizer: ' || organizer_rec.ORGANIZER_NAME);
END LOOP;
END get_organizers_for_tournament;

DECLARE
v_tournament_id NUMBER := 1;
BEGIN
get_organizers_for_tournament(v_tournament_id);
END;
---------------------------------------------------------------

You might also like