الاثنين، 30 أبريل 2012

الدرس الثالث عشر : انشاء ال views


الدرس الثالث عشر : انشاء ال views, ضمن سلسلة دروس كيف تبدأ في تعلم الأوراكل

السلام عليكم ورحمة الله وبركاته
الدرس الثالث عشر

سنتناول في هذا الدرس عن كيفية انشاء ال Views والتعامل معها ....


تعريف ال views
هي عبارة عن استعلام نستطيع وضعه على جدول او اكثر من جدول بحيث لا نستطيع الاضافة او الحذف او التعديل من خلاله اذا هو عرض ويساعد في انشاء استعلامات ثابتة على الجداول

قاعدة انشاء ال View
كود:
CREATE VIEW view_name AS
SELECT columns
FROM table
WHERE predicates;
مثال
كود:
CREATE VIEW sup_orders AS
SELECT supplier.supplier_id, orders.quantity, orders.price
FROM supplier, orders
WHERE supplier.supplier_id = orders.supplier_id
and supplier.supplier_name = 'IBM';
وطريقة عرض الview وعرض محتوياتها هي
كود:
SELECT *
FROM sup_orders;
ويمكن التحديث على ال view بدون حذفها

وذلك حسب القاعدة التالية
كود:
CREATE OR REPLACE VIEW view_name AS
SELECT columns
FROM table
WHERE predicates;
مثال
كود:
CREATE or REPLACE VIEW sup_orders AS
SELECT supplier.supplier_id, orders.quantity, orders.price
FROM supplier, orders
WHERE supplier.supplier_id = orders.supplier_id
and supplier.supplier_name = 'Microsoft';
وحذف ال view
يتم حسب القاعدة التالية
كود:
DROP VIEW view_name;
مثال
كود:
DROP VIEW sup_orders;
وهناك طريقة لمعرفة ال view في schema معينه
حسب التالي
يوجد في يوزر sys جدول اسمه dba_views
من خلال هذا الجدول ممكن ان تستعرض ال view
ولأي يوزر تابع وما هي جملة ال select التي موجودة في هذا الviews


انتهى الدرس

الدرس الثاني عشر: انشاء التريجر على قاعدة البيانات


الدرس الثاني عشر: انشاء التريجر على قاعدة البيانات, ضمن سلسلة دروس تعلم الاوراكل


السلام عليكم ورحمة وبركاته
الدرس الثاني عشر

CREATE TRIGGERS
سنتناول بهذا الدرس ان شاء الله كيفية انشاء التريجر على قاعدة البيانات وكيفية التعامل معها وماهي انواعها وكيفية

تعريف التريجر
تعرف التريجر على انها الحدث الذي ينفذ اثناء حدوث تغيير على جدول معين بقاعدة البيانات لتنفيذ مجموعة من التعليمات او لأخذ معلومات واضافتها بجدول آخر او استدعاء PROCEDURE او حتى استدعاء FUNCTION تم انشائها على قاعدة البيانات

قاعدة انشاء التريجر
كود:
CREATE or REPLACE TRIGGER trigger_name
TRIGGER TYPE
ON table_name
[ FOR EACH ROW ]
DECLARE
-- variable declarations
BEGIN
-- trigger code
EXCEPTION
WHEN ...
-- exception handling
END;
وسوف نشرح كيفية التعامل معها
CREATE or REPLACE TRIGGER trigger_name
هنا نقوم بعمل او تبديل الTriggerكتب CREATE OR REPLACE ثم نكتب TRIGGER نكتب اسم الTRIGGER وفائدة الREPLACE هنا لتبديل الTRIGGER القديم بالTRIGGER الجديد الذي نريد انشائه

TRIGGER TYPE
نوع التريجر وهي انواع Insert Triggers و Update Trigger و Delete Trigger
وسوف نستعرض هذه الانواع بالتفصيل


ON table_name
وهنا تضع اسم الجدول

[ FOR EACH ROW ]
معناها لكل سطر يضاف
مع ملاحظة ان :
1-
لاتستطيع انشاء هذه الانواع من التريجرات على views
2-
يمكن التعديل على new داخل التريجر
3-
لا يمكن التعديل على old داخل التريجر
والباقي هو عبارة عن اضافة المتغيرات او التحكم بجزئية الجداول والسيطرة على البيانات المدخلة
وفي هذه الجزئية ممكن ان تستدعي بروسيجر او فانكشن

واول انواع التريجر هو Insert Triggers
وهو نوعان
النوع الاول
BEFORE INSERT Trigger
كود:
CREATE or REPLACE TRIGGER trigger_name
BEFORE INSERT
ON table_name
[ FOR EACH ROW ]
DECLARE
-- variable declarations
BEGIN
-- trigger code
EXCEPTION
WHEN ...
-- exception handling
END;
مثال عليه

اذا قمنا بانشاء هذا الجدول
كود:
CREATE TABLE orders
( order_id number(5),
quantity number(4),
cost_per_item number(6,2),
total_cost number(8,2),
create_date date,
created_by varchar2(10)
);


ننشئ هذا التريجر
كود:
CREATE OR REPLACE TRIGGER orders_before_insert
BEFORE INSERT
ON orders
FOR EACH ROW
DECLARE
v_username varchar2(10);
BEGIN
-- ايجاد اسم المستخدم
SELECT user INTO v_username
FROM dual;
-- تعديل تاريخ التعديل حيث new ترمز الى قيمة جديدة
:new.create_date := sysdate;
-- هنا نضيف اسم المستخدم الجديد حيث استخدمنا new لنضع القيمة الجديدة وهو عبارة  باراميتر
INSERT
:new.created_by := v_username;
END;
النوع الثاني
AFTER INSERT
كود:
CREATE or REPLACE TRIGGER trigger_name
AFTER INSERT
ON table_name
[ FOR EACH ROW ]
DECLARE
-- variable declarations
BEGIN
-- trigger code
EXCEPTION
WHEN ...
-- exception handling
END;
مثال عليه
ننشئ هذا الجدول:
كود:
CREATE TABLE orders
( order_id number(5),
quantity number(4),
cost_per_item number(6,2),
total_cost number(8,2)
);
ننشئ تريجر after insert:
كود:
CREATE OR REPLACE TRIGGER orders_after_insert
AFTER INSERT
ON orders
FOR EACH ROW
DECLARE
v_username varchar2(10);
BEGIN
-- Find username of person performing the INSERT into the table
SELECT user INTO v_username
FROM dual;
-- Insert record into audit table
INSERT INTO orders_audit
( order_id,
quantity,
cost_per_item,
total_cost,
username )
VALUES
( :new.order_id,
:new.quantity,
:new.cost_per_item,
:new.total_cost,
v_username );
END
اما الانواع الباقيه فهي نفس ما سبق واكتفي بعرض مثال على كل منها
We could then create a BEFORE/AFTER UPDATE trigger as follows:
كود:
CREATE OR REPLACE TRIGGER orders_before_update
BEFORE UPDATE
ON orders
FOR EACH ROW
DECLARE
v_username varchar2(10);
BEGIN
-- Find username of person performing UPDATE on the table
SELECT user INTO v_username
FROM dual;
-- Update updated_date field to current system date
:new.updated_date := sysdate;
-- Update updated_by field to the username of the person performing the UPDATE
:new.updated_by := v_username;
END;

We could then create an BEFORE/AFTER DELETE trigger as follows:
كود:
CREATE OR REPLACE TRIGGER orders_after_delete
AFTER DELETE
ON orders
FOR EACH ROW
DECLARE
v_username varchar2(10);
BEGIN
-- Find username of person performing the DELETE on the table
SELECT user INTO v_username
FROM dual;
-- Insert record into audit table
INSERT INTO orders_audit
( order_id,
quantity,
cost_per_item,
total_cost,
delete_date,
deleted_by)
VALUES
( :old.order_id,
:old.quantity,
:old.cost_per_item,
:old.total_cost,
sysdate,
v_username );
END;
كيفية حذف التريجر
Drop a Trigger
كود:
DROP TRIGGER trigger_name;
مثال
كود:
DROP TRIGGER orders_before_insert;
ايقاف عمل التريجر DISABLE
كود:
ALTER TRIGGER trigger_name DISABLE;
مثال
كود:
ALTER TRIGGER orders_before_insert DISABLE;
ايقاف عمل جميع التريجرات على الجدول
كود:
ALTER TABLE table_name DISABLE ALL TRIGGERS;
مثال
كود:
ALTER TABLE orders DISABLE ALL TRIGGERS;
تفعيل عمل التريجر
كود:
ALTER TRIGGER trigger_name ENABLE;
مثال
كود:
ALTER TRIGGER orders_before_insert ENABLE;
تفعيل عمل جميع التريجرات على الجدول
كود:
ALTER TABLE table_name ENABLE ALL TRIGGERS;
مثال
كود:
ALTER TABLE orders ENABLE ALL TRIGGERS;

انتهى الدرس