جامعة
تعز
كلية
المعلومات وتقنية الهندسة
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,
-
انشاء
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,: