‫جامعة‬
‫تعز‬
‫كلية‬
‫المعلومات‬ ‫وتقنية‬ ‫الهندسة‬
sw : ‫قسم‬
‫ي‬
‫ثان‬ : ‫المستوى‬
S
DBM
:
roject
P
‫االسم‬
:
‫ل‬
‫صخريمحمديطاهريمنصوريعبد‬
‫الحق‬
. ‫محمد‬
‫علي‬ ‫قائد‬ ‫رياض‬
‫العامري‬ ‫نافع‬
‫إ‬
‫المهندس‬ ‫شراف‬
:
‫عمر‬
‫الشميري‬
Taiz University
Faculty of Engineering & IT
Dept :sw
Level : 2
:‫األولى‬ ‫المرحلة‬
‫قاعدة‬ ‫إعداد‬
‫البيانات‬
Tablespace:‫انشاء‬ -
CREATE TABLESPACE DATA_USER
DATAFILE 'DATA_USER.dbf' SIZE 100M
AUTOEXTEND ON NEXT 100M MAXSIZE
UNLIMITED;
-
: ‫الالزمة‬ ‫الصالحيات‬ ‫وإعطائه‬ ‫جديد‬ ‫مستخدم‬ ‫إنشاء‬
CREATE USER BANK_USER IDENTIFIED BY BANK
DEFAULT TABLESPACE DATA_USER
QUOTA UNLIMITED ON DATA_USER
TEMPORARY TABLESPACE TEMP;
-
‫إعطاء‬
:‫صالحيات‬ ‫المستخدم‬
GRANT CREATE SESSION TO BANK_USER;
GRANT CREATE TABLE TO BANK_USER;
GRANT CREATE VIEW TO BANK_USER;
GRANT CREATE PROCEDURE TO BANK_USER;
GRANT CREATE TRIGGER TO BANK_USER;
GRANT UNLIMITED TABLESPACE TO BANK_USER;
-
‫المرحله‬
:‫الثانيه‬
‫االساسية‬ ‫الجداول‬ ‫انشاء‬
-
: ‫العمالء‬ ‫جدول‬ ‫انشاء‬
CREATE TABLE CUSTOMERS (
CUSTOMER_ID NUMBER(10) PRIMARY KEY,
NAME VARCHAR2(100) NOT NULL,
EMAIL VARCHAR2(100) UNIQUE,
PHONE VARCHAR2(15) UNIQUE,
ADDRESS VARCHAR2(200),
REGISTRATION_DATE DATE DEFAULT SYSDATE (;
-
: ‫الحسابات‬ ‫جدول‬ ‫انشاء‬
CREATE TABLE ACCOUNTS (
ACCOUNT_ID NUMBER PRIMARY KEY,
CUSTOMER_ID NUMBER REFERENCES CUSTOMERS
(CUSTOMER_ID),
ACCOUNT_TYPE VARCHAR2(50),
BALANCE NUMBER DEFAULT 0 CHECK (BALANCE >= 0),
OPEN_DATE DATE DEFAULT SYSDATE,
ACCOUNT_STATUS VARCHAR2(20)
(;
-
:‫المعامالت‬ ‫جدول‬ ‫انشاء‬
CREATE TABLE TRANSACTIONS (
TRANSACTION_ID NUMBER PRIMARY KEY,
ACCOUNT_ID NUMBER REFERENCES ACCOUNTS
(ACCOUNT_ID),
AMOUNT NUMBER CHECK (AMOUNT > 0),
TRANSACTION_TYPE VARCHAR2(50),
TRANSACTION_DATE DATE DEFAULT SYSDATE,
DESCRIPTION VARCHAR2(200)
(;
-
:‫التغيرات‬ ‫سجل‬ ‫جدول‬ ‫انشاء‬
CREATE TABLE CHANGE_LOG (
LOG_ID NUMBER(10) PRIMARY KEY,
ACCOUNT_ID NUMBER(10) REFERENCES ACCOUNTS
(ACCOUNT_ID),
OLD_BALANCE NUMBER,
NEW_BALANCE NUMBER,
CHANGE_DATE DATE DEFAULT SYSDATE,
CHANGED_BY VARCHAR2(100)
(;
-
‫انشاء‬
sequences
‫الرئسية‬ ‫للمفاتيح‬ ‫متسلسله‬ ‫و‬ ‫فريدة‬ ‫ارقام‬ ‫العطاء‬
: ‫للجداول‬
- CREATE SEQUENCE CUSTOMERS_SEQ START WITH 1
INCREMENT BY 1 NOCACHE;
- CREATE SEQUENCE ACCOUNTS_SEQ START WITH 1 INCREMENT
BY 1 NOCACHE;
- CREATE SEQUENCE TRANSACTIONS_SEQ START WITH 1
INCREMENT BY 1 NOCACHE;
- CREATE SEQUENCE CHANGE_LOG_SEQ START WITH 1
INCREMENT BY 1 NOCACHE;
-
‫انشاء‬ : ‫الثالثة‬ ‫المرحله‬
package specificatoin
‫لإلجراءات‬
. ‫والوظائف‬
CREATE OR REPLACE PACKAGE BANK_PACKAGE AS
PROCEDURE ADD_CUSTOMER(
NAME VARCHAR2,
EMAIL VARCHAR2,
PHONE VARCHAR2,
ADDRESS VARCHAR2
( ;
PROCEDURE UPDATE_CUSTOMER(
CUSTOMER_ID NUMBER,
NAME VARCHAR2,
EMAIL VARCHAR2,
PHONE VARCHAR2,
ADDRESS VARCHAR2
( ;
PROCEDURE OPEN_ACCOUNT(
CUSTOMER_ID NUMBER,
ACCOUNT_TYPE VARCHAR2
( ;
PROCEDURE DEPOSIT(
ACCOUNT_ID NUMBER,
AMOUNT NUMBER
(;
PROCEDURE WITHDRAW(
ACCOUNT_ID NUMBER,
AMOUNT NUMBER
( ;
PROCEDURE TRANSFER(
FROM_ACCOUNT_ID NUMBER,
TO_ACCOUNT_ID NUMBER,
AMOUNT NUMBER
( ;
PROCEDURE FREEZE_ACCOUNT(
ACCOUNT_ID NUMBER
( ;
PROCEDURE ACTIVATE_ACCOUNT(
ACCOUNT_ID NUMBER
( ;
FUNCTION GET_ACCOUNT_STATEMENT(
ACCOUNT_ID NUMBER
RETURN SYS_REFCURSOR
(;
END BANK_PACKAGE;
-
‫انشاء‬
package body
: ‫والوظائف‬ ‫لإلجراءات‬
CREATE OR REPLACE PACKAGE BODY BANK_PACKAGE IS
PROCEDURE ADD_CUSTOMER(
NAME VARCHAR2,EMAIL VARCHAR2, PHONE
VARCHAR2,
ADDRESS VARCHAR2)
IS
BEGIN
INSERT INTO CUSTOMERS (
CUSTOMER_ID,
NAME,
EMAIL,
PHONE,
ADDRESS (
VALUES (
CUSTOMERS_SEQ.NEXTVAL,
P_NAME,
P_EMAIL,
P_PHONE,
P_ADDRESS
( ;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error adding customer: '
SQLERRM); ||
END;
PROCEDURE UPDATE_CUSTOMER(
P_CUSTOMER_ID NUMBER,
P_NAME VARCHAR2,
P_EMAIL VARCHAR2,
P_PHONE VARCHAR2,
P_ADDRESS VARCHAR2 (
IS
BEGIN
UPDATE CUSTOMERS
SET
NAME = P_NAME,
EMAIL = P_EMAIL,
PHONE = P_PHONE,
ADDRESS = P_ADDRESS
WHERE
CUSTOMER_ID = P_CUSTOMER_ID;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error updating customer: '
||
SQLERRM);
END;
PROCEDURE OPEN_ACCOUNT(
P_CUSTOMER_ID NUMBER,
P_ACCOUNT_TYPE VARCHAR2 (
IS
BEGIN
INSERT INTO ACCOUNTS (
ACCOUNT_ID,
CUSTOMER_ID,
ACCOUNT_TYPE,
ACCOUNT_STATUS
VALUES (
ACCOUNTS_SEQ.NEXTVAL,
P_CUSTOMER_ID,
P_ACCOUNT_TYPE,
Active'' (
;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error opening account: ' ||
SQLERRM);
END;
PROCEDURE DEPOSIT(
P_ACCOUNT_ID NUMBER,
P_AMOUNT NUMBER
IS )
BEGIN
IF P_AMOUNT <= 0 THEN
RAISE_APPLICATION_ERROR(-20002, 'Deposit amount
must be positive.');
END IF;
UPDATE ACCOUNTS
SET
BALANCE = BALANCE + P_AMOUNT
WHERE
ACCOUNT_ID = P_ACCOUNT_ID;
INSERT INTO TRANSACTIONS (
TRANSACTION_ID,
ACCOUNT_ID,
AMOUNT,
TRANSACTION_TYPE (
VALUES (
TRANSACTIONS_SEQ.NEXTVAL,
P_ACCOUNT_ID,
P_AMOUNT,
Deposit'' (
;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error during deposit: ' ||
SQLERRM);
END;
PROCEDURE WITHDRAW(
P_ACCOUNT_ID NUMBER,
P_AMOUNT NUMBER (
IS
BEGIN
IF P_AMOUNT <= 0 THEN
RAISE_APPLICATION_ERROR(-20003, 'Withdrawal
amount must be positive.');
END IF;
UPDATE ACCOUNTS
SET
BALANCE = BALANCE - P_AMOUNT
WHERE
ACCOUNT_ID = P_ACCOUNT_ID;
INSERT INTO TRANSACTIONS (
TRANSACTION_ID,
ACCOUNT_ID,
AMOUNT,
TRANSACTION_TYPE,
TRANSACTION_DATE,
DESCRIPTION
VALUES (
TRANSACTIONS_SEQ.NEXTVAL,
P_ACCOUNT_ID,
P_AMOUNT,
Withdrawal','
SYSDATE,
Withdrawal transaction''
( ;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error during withdrawal: '
||
SQLERRM);
END;
PROCEDURE TRANSFER(
P_FROM_ACCOUNT_ID NUMBER,
P_TO_ACCOUNT_ID NUMBER,
P_AMOUNT NUMBER (
IS
BEGIN
WITHDRAW(P_FROM_ACCOUNT_ID, P_AMOUNT);
DEPOSIT(P_TO_ACCOUNT_ID, P_AMOUNT);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error during transfer: ' ||
SQLERRM);
END;
for account freezing -
-
PROCEDURE FREEZE_ACCOUNT(
P_ACCOUNT_ID NUMBER (
IS
BEGIN
UPDATE ACCOUNTS
SET
ACCOUNT_STATUS = 'Frozen' WHERE
ACCOUNT_ID = P_ACCOUNT_ID;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error freezing account: ' ||
SQLERRM); END;
for account Active -
-
PROCEDURE ACTIVATE_ACCOUNT(
P_ACCOUNT_ID NUMBER (
IS
BEGIN
UPDATE ACCOUNTS
SET
ACCOUNT_STATUS = 'Active'
WHERE
ACCOUNT_ID = P_ACCOUNT_ID;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error activating account: '
||
SQLERRM);
END;
FUNCTION GET_ACCOUNT_STATEMENT(
P_ACCOUNT_ID NUMBER (
RETURN SYS_REFCURSOR IS
ACCOUNT_CURSOR SYS_REFCURSOR;
BEGIN
OPEN ACCOUNT_CURSOR FOR
SELECT
*
FROM
TRANSACTIONS
WHERE
ACCOUNT_ID = P_ACCOUNT_ID
ORDER BY
TRANSACTION_DATE;
RETURN ACCOUNT_CURSOR; END;
END BANK_PACKAGE;
-
‫انشاء‬
Triggers
: ‫السحب‬ ‫عملية‬ ‫من‬ ‫للتحقق‬
CREATE OR REPLACE TRIGGER VALIDATE_WITHDRAWAL BEFORE
UPDATE OF BALANCE ON ACCOUNTS FOR EACH ROW WHEN
(NEW.BALANCE < 0)
BEGIN
RAISE_APPLICATION_ERROR(-20001, 'Insufficient balance for
withdrawal.');
END;
-
‫انشاء‬
trigger
‫لتسجيل‬
‫الرصيد‬ ‫في‬ ‫التغيرات‬
‫ي‬
CREATE OR REPLACE TRIGGER LOG_BALANCE_CHANGES AFTER
UPDATE OF BALANCE ON ACCOUNTS FOR EACH ROW
BEGIN
INSERT INTO CHANGE_LOG (
LOG_ID,
ACCOUNT_ID,
OLD_BALANCE,
NEW_BALANCE,
CHANGE_DATE,
CHANGED_BY (
VALUES (
CHANGE_LOG_SEQ.NEXTVAL, OLD.ACCOUNT_ID,:
OLD.BALANCE,:
NEW.BALANCE,:
SYSDATE,
USER
( ;
END;
‫انشاء‬
trigger
.‫كبيرة‬ ‫معامالت‬ ‫اجراء‬ ‫عند‬ ‫تنبيهات‬ ‫الرسال‬
‫ي‬
‫ي‬ -
CREATE OR REPLACE TRIGGER NOTIFY_LARGE_TRANSACTION
AFTER INSERT ON TRANSACTIONS FOR EACH ROW
WHEN (
NEW.AMOUNT > 10000
BEGIN
DBMS_OUTPUT.PUT_LINE(
Large transaction detected for account ' '
NEW.ACCOUNT_ID: || with amount
' ' ||
NEW.AMOUNT: ||
( ;
END;
.‫تجريبية‬ ‫بيانات‬ ‫ادخال‬ : ‫الرابعه‬ ‫المرحله‬
‫ي‬ -
‫عمالء‬ ‫اضافه‬
‫ي‬
BEGIN
BANK_PACKAGE.ADD_CUSTOMER('John Doe',
'john.doe@example.com', '1234567890', '123 Main St');
BANK_PACKAGE.ADD_CUSTOMER('Jane Smith',
'jane.smith@example.com', '0987654321', '456 Elm St');
BANK_PACKAGE.ADD_CUSTOMER('nabeeh',
'mohammed.nabeeh@example.com', '738990702', 'tiaz St');
BANK_PACKAGE.ADD_CUSTOMER('sakher',
'sakher.nabeeh@example.com', '7389903402', 'sanna St');
END;
-
‫حسابات‬ ‫فتح‬
BEGIN
BANK_PACKAGE.OPEN_ACCOUNT(1, 'Savings');
BANK_PACKAGE.OPEN_ACCOUNT(2, 'Checking');
-
BANK_PACKAGE.OPEN_ACCOUNT(3, 'Checking');
BANK_PACKAGE.OPEN_ACCOUNT(4, 'Checking');
END;
‫ي‬
‫تحويل‬ ‫و‬ ‫سحب‬ ‫و‬ ‫إيداع‬ ‫عملية‬
‫ي‬
BEGIN
BANK_PACKAGE.DEPOSIT(1, 10000);
BANK_PACKAGE.DEPOSIT(2, 1000);
BANK_PACKAGE.WITHDRAW(1, 200);
BANK_PACKAGE.TRANSFER(1, 2, 300);
END;
-
PROJECT_DBMS  databases management (sw).pdf

PROJECT_DBMS databases management (sw).pdf

  • 1.
    ‫جامعة‬ ‫تعز‬ ‫كلية‬ ‫المعلومات‬ ‫وتقنية‬ ‫الهندسة‬ sw: ‫قسم‬ ‫ي‬ ‫ثان‬ : ‫المستوى‬ S DBM : roject P ‫االسم‬ : ‫ل‬ ‫صخريمحمديطاهريمنصوريعبد‬ ‫الحق‬ . ‫محمد‬ ‫علي‬ ‫قائد‬ ‫رياض‬ ‫العامري‬ ‫نافع‬ ‫إ‬ ‫المهندس‬ ‫شراف‬ : ‫عمر‬ ‫الشميري‬ Taiz University Faculty of Engineering & IT Dept :sw Level : 2
  • 2.
    :‫األولى‬ ‫المرحلة‬ ‫قاعدة‬ ‫إعداد‬ ‫البيانات‬ Tablespace:‫انشاء‬- CREATE TABLESPACE DATA_USER DATAFILE 'DATA_USER.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED; - : ‫الالزمة‬ ‫الصالحيات‬ ‫وإعطائه‬ ‫جديد‬ ‫مستخدم‬ ‫إنشاء‬ CREATE USER BANK_USER IDENTIFIED BY BANK DEFAULT TABLESPACE DATA_USER QUOTA UNLIMITED ON DATA_USER TEMPORARY TABLESPACE TEMP; - ‫إعطاء‬ :‫صالحيات‬ ‫المستخدم‬ GRANT CREATE SESSION TO BANK_USER; GRANT CREATE TABLE TO BANK_USER; GRANT CREATE VIEW TO BANK_USER; GRANT CREATE PROCEDURE TO BANK_USER; GRANT CREATE TRIGGER TO BANK_USER; GRANT UNLIMITED TABLESPACE TO BANK_USER; - ‫المرحله‬ :‫الثانيه‬ ‫االساسية‬ ‫الجداول‬ ‫انشاء‬ - : ‫العمالء‬ ‫جدول‬ ‫انشاء‬ CREATE TABLE CUSTOMERS ( CUSTOMER_ID NUMBER(10) PRIMARY KEY, NAME VARCHAR2(100) NOT NULL, EMAIL VARCHAR2(100) UNIQUE, PHONE VARCHAR2(15) UNIQUE,
  • 3.
    ADDRESS VARCHAR2(200), REGISTRATION_DATE DATEDEFAULT SYSDATE (; - : ‫الحسابات‬ ‫جدول‬ ‫انشاء‬ CREATE TABLE ACCOUNTS ( ACCOUNT_ID NUMBER PRIMARY KEY, CUSTOMER_ID NUMBER REFERENCES CUSTOMERS (CUSTOMER_ID), ACCOUNT_TYPE VARCHAR2(50), BALANCE NUMBER DEFAULT 0 CHECK (BALANCE >= 0), OPEN_DATE DATE DEFAULT SYSDATE, ACCOUNT_STATUS VARCHAR2(20) (; - :‫المعامالت‬ ‫جدول‬ ‫انشاء‬ CREATE TABLE TRANSACTIONS ( TRANSACTION_ID NUMBER PRIMARY KEY, ACCOUNT_ID NUMBER REFERENCES ACCOUNTS (ACCOUNT_ID), AMOUNT NUMBER CHECK (AMOUNT > 0), TRANSACTION_TYPE VARCHAR2(50), TRANSACTION_DATE DATE DEFAULT SYSDATE, DESCRIPTION VARCHAR2(200) (; - :‫التغيرات‬ ‫سجل‬ ‫جدول‬ ‫انشاء‬ CREATE TABLE CHANGE_LOG ( LOG_ID NUMBER(10) PRIMARY KEY, ACCOUNT_ID NUMBER(10) REFERENCES ACCOUNTS (ACCOUNT_ID), OLD_BALANCE NUMBER, NEW_BALANCE NUMBER, CHANGE_DATE DATE DEFAULT SYSDATE, CHANGED_BY VARCHAR2(100) (;
  • 4.
    - ‫انشاء‬ sequences ‫الرئسية‬ ‫للمفاتيح‬ ‫متسلسله‬‫و‬ ‫فريدة‬ ‫ارقام‬ ‫العطاء‬ : ‫للجداول‬ - CREATE SEQUENCE CUSTOMERS_SEQ START WITH 1 INCREMENT BY 1 NOCACHE; - CREATE SEQUENCE ACCOUNTS_SEQ START WITH 1 INCREMENT BY 1 NOCACHE; - CREATE SEQUENCE TRANSACTIONS_SEQ START WITH 1 INCREMENT BY 1 NOCACHE; - CREATE SEQUENCE CHANGE_LOG_SEQ START WITH 1 INCREMENT BY 1 NOCACHE; - ‫انشاء‬ : ‫الثالثة‬ ‫المرحله‬ package specificatoin ‫لإلجراءات‬ . ‫والوظائف‬ CREATE OR REPLACE PACKAGE BANK_PACKAGE AS PROCEDURE ADD_CUSTOMER( NAME VARCHAR2, EMAIL VARCHAR2, PHONE VARCHAR2, ADDRESS VARCHAR2 ( ; PROCEDURE UPDATE_CUSTOMER( CUSTOMER_ID NUMBER, NAME VARCHAR2, EMAIL VARCHAR2, PHONE VARCHAR2, ADDRESS VARCHAR2 ( ; PROCEDURE OPEN_ACCOUNT( CUSTOMER_ID NUMBER, ACCOUNT_TYPE VARCHAR2
  • 5.
    ( ; PROCEDURE DEPOSIT( ACCOUNT_IDNUMBER, AMOUNT NUMBER (; PROCEDURE WITHDRAW( ACCOUNT_ID NUMBER, AMOUNT NUMBER ( ; PROCEDURE TRANSFER( FROM_ACCOUNT_ID NUMBER, TO_ACCOUNT_ID NUMBER, AMOUNT NUMBER ( ; PROCEDURE FREEZE_ACCOUNT( ACCOUNT_ID NUMBER ( ; PROCEDURE ACTIVATE_ACCOUNT( ACCOUNT_ID NUMBER ( ; FUNCTION GET_ACCOUNT_STATEMENT( ACCOUNT_ID NUMBER RETURN SYS_REFCURSOR (; END BANK_PACKAGE; - ‫انشاء‬ package body : ‫والوظائف‬ ‫لإلجراءات‬ CREATE OR REPLACE PACKAGE BODY BANK_PACKAGE IS PROCEDURE ADD_CUSTOMER( NAME VARCHAR2,EMAIL VARCHAR2, PHONE VARCHAR2, ADDRESS VARCHAR2) IS
  • 6.
    BEGIN INSERT INTO CUSTOMERS( CUSTOMER_ID, NAME, EMAIL, PHONE, ADDRESS ( VALUES ( CUSTOMERS_SEQ.NEXTVAL, P_NAME, P_EMAIL, P_PHONE, P_ADDRESS ( ; COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error adding customer: ' SQLERRM); || END; PROCEDURE UPDATE_CUSTOMER( P_CUSTOMER_ID NUMBER, P_NAME VARCHAR2, P_EMAIL VARCHAR2, P_PHONE VARCHAR2, P_ADDRESS VARCHAR2 ( IS BEGIN UPDATE CUSTOMERS SET NAME = P_NAME, EMAIL = P_EMAIL, PHONE = P_PHONE, ADDRESS = P_ADDRESS WHERE CUSTOMER_ID = P_CUSTOMER_ID;
  • 7.
    EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Errorupdating customer: ' || SQLERRM); END; PROCEDURE OPEN_ACCOUNT( P_CUSTOMER_ID NUMBER, P_ACCOUNT_TYPE VARCHAR2 ( IS BEGIN INSERT INTO ACCOUNTS ( ACCOUNT_ID, CUSTOMER_ID, ACCOUNT_TYPE, ACCOUNT_STATUS VALUES ( ACCOUNTS_SEQ.NEXTVAL, P_CUSTOMER_ID, P_ACCOUNT_TYPE, Active'' ( ; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error opening account: ' || SQLERRM); END; PROCEDURE DEPOSIT( P_ACCOUNT_ID NUMBER, P_AMOUNT NUMBER IS ) BEGIN IF P_AMOUNT <= 0 THEN RAISE_APPLICATION_ERROR(-20002, 'Deposit amount must be positive.');
  • 8.
    END IF; UPDATE ACCOUNTS SET BALANCE= BALANCE + P_AMOUNT WHERE ACCOUNT_ID = P_ACCOUNT_ID; INSERT INTO TRANSACTIONS ( TRANSACTION_ID, ACCOUNT_ID, AMOUNT, TRANSACTION_TYPE ( VALUES ( TRANSACTIONS_SEQ.NEXTVAL, P_ACCOUNT_ID, P_AMOUNT, Deposit'' ( ; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error during deposit: ' || SQLERRM); END; PROCEDURE WITHDRAW( P_ACCOUNT_ID NUMBER, P_AMOUNT NUMBER ( IS BEGIN IF P_AMOUNT <= 0 THEN RAISE_APPLICATION_ERROR(-20003, 'Withdrawal amount must be positive.'); END IF; UPDATE ACCOUNTS SET BALANCE = BALANCE - P_AMOUNT WHERE ACCOUNT_ID = P_ACCOUNT_ID;
  • 9.
    INSERT INTO TRANSACTIONS( TRANSACTION_ID, ACCOUNT_ID, AMOUNT, TRANSACTION_TYPE, TRANSACTION_DATE, DESCRIPTION VALUES ( TRANSACTIONS_SEQ.NEXTVAL, P_ACCOUNT_ID, P_AMOUNT, Withdrawal',' SYSDATE, Withdrawal transaction'' ( ; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error during withdrawal: ' || SQLERRM); END; PROCEDURE TRANSFER( P_FROM_ACCOUNT_ID NUMBER, P_TO_ACCOUNT_ID NUMBER, P_AMOUNT NUMBER ( IS BEGIN WITHDRAW(P_FROM_ACCOUNT_ID, P_AMOUNT); DEPOSIT(P_TO_ACCOUNT_ID, P_AMOUNT); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error during transfer: ' || SQLERRM); END; for account freezing - -
  • 10.
    PROCEDURE FREEZE_ACCOUNT( P_ACCOUNT_ID NUMBER( IS BEGIN UPDATE ACCOUNTS SET ACCOUNT_STATUS = 'Frozen' WHERE ACCOUNT_ID = P_ACCOUNT_ID; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error freezing account: ' || SQLERRM); END; for account Active - - PROCEDURE ACTIVATE_ACCOUNT( P_ACCOUNT_ID NUMBER ( IS BEGIN UPDATE ACCOUNTS SET ACCOUNT_STATUS = 'Active' WHERE ACCOUNT_ID = P_ACCOUNT_ID; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error activating account: ' || SQLERRM); END; FUNCTION GET_ACCOUNT_STATEMENT( P_ACCOUNT_ID NUMBER ( RETURN SYS_REFCURSOR IS ACCOUNT_CURSOR SYS_REFCURSOR; BEGIN
  • 11.
    OPEN ACCOUNT_CURSOR FOR SELECT * FROM TRANSACTIONS WHERE ACCOUNT_ID= P_ACCOUNT_ID ORDER BY TRANSACTION_DATE; RETURN ACCOUNT_CURSOR; END; END BANK_PACKAGE; - ‫انشاء‬ Triggers : ‫السحب‬ ‫عملية‬ ‫من‬ ‫للتحقق‬ CREATE OR REPLACE TRIGGER VALIDATE_WITHDRAWAL BEFORE UPDATE OF BALANCE ON ACCOUNTS FOR EACH ROW WHEN (NEW.BALANCE < 0) BEGIN RAISE_APPLICATION_ERROR(-20001, 'Insufficient balance for withdrawal.'); END; - ‫انشاء‬ trigger ‫لتسجيل‬ ‫الرصيد‬ ‫في‬ ‫التغيرات‬ ‫ي‬ CREATE OR REPLACE TRIGGER LOG_BALANCE_CHANGES AFTER UPDATE OF BALANCE ON ACCOUNTS FOR EACH ROW BEGIN INSERT INTO CHANGE_LOG ( LOG_ID, ACCOUNT_ID, OLD_BALANCE, NEW_BALANCE, CHANGE_DATE, CHANGED_BY ( VALUES ( CHANGE_LOG_SEQ.NEXTVAL, OLD.ACCOUNT_ID,: OLD.BALANCE,: NEW.BALANCE,:
  • 12.
  • 13.
    ( ; END; ‫انشاء‬ trigger .‫كبيرة‬ ‫معامالت‬‫اجراء‬ ‫عند‬ ‫تنبيهات‬ ‫الرسال‬ ‫ي‬ ‫ي‬ - CREATE OR REPLACE TRIGGER NOTIFY_LARGE_TRANSACTION AFTER INSERT ON TRANSACTIONS FOR EACH ROW WHEN ( NEW.AMOUNT > 10000 BEGIN DBMS_OUTPUT.PUT_LINE( Large transaction detected for account ' ' NEW.ACCOUNT_ID: || with amount ' ' || NEW.AMOUNT: || ( ; END; .‫تجريبية‬ ‫بيانات‬ ‫ادخال‬ : ‫الرابعه‬ ‫المرحله‬ ‫ي‬ -
  • 14.
    ‫عمالء‬ ‫اضافه‬ ‫ي‬ BEGIN BANK_PACKAGE.ADD_CUSTOMER('John Doe', 'john.doe@example.com','1234567890', '123 Main St'); BANK_PACKAGE.ADD_CUSTOMER('Jane Smith', 'jane.smith@example.com', '0987654321', '456 Elm St'); BANK_PACKAGE.ADD_CUSTOMER('nabeeh', 'mohammed.nabeeh@example.com', '738990702', 'tiaz St'); BANK_PACKAGE.ADD_CUSTOMER('sakher', 'sakher.nabeeh@example.com', '7389903402', 'sanna St'); END; - ‫حسابات‬ ‫فتح‬ BEGIN BANK_PACKAGE.OPEN_ACCOUNT(1, 'Savings'); BANK_PACKAGE.OPEN_ACCOUNT(2, 'Checking'); -
  • 15.
    BANK_PACKAGE.OPEN_ACCOUNT(3, 'Checking'); BANK_PACKAGE.OPEN_ACCOUNT(4, 'Checking'); END; ‫ي‬ ‫تحويل‬‫و‬ ‫سحب‬ ‫و‬ ‫إيداع‬ ‫عملية‬ ‫ي‬ BEGIN BANK_PACKAGE.DEPOSIT(1, 10000); BANK_PACKAGE.DEPOSIT(2, 1000); BANK_PACKAGE.WITHDRAW(1, 200); BANK_PACKAGE.TRANSFER(1, 2, 300); END; -