كتابة الجمل التنفيذية في PL/SQL

Download Report

Transcript كتابة الجمل التنفيذية في PL/SQL

‫كتابة الجمل التنفيذية في‬
‫‪PL/SQL‬‬
‫الجمل التنفيذية في ‪PL/SQL‬‬
‫‪‬‬
‫تركيب الجمل (‪ )Syntax‬في ‪:PL/SQL‬‬
‫تتكون الجمل من مجموعة من المكونات تفصل بينها فراغات‪ ,‬محددات‪ ,‬مالحظات‪ .‬وتخضع هذه‬
‫المكونات والفواصل إلى قواعد يجب مراعاتها‪.‬‬
‫مكونات الجمل‪:‬‬
‫‪‬‬
‫‪ .1‬متغيرات‪.‬‬
‫‪ .2‬القيم الثابتة ‪. Literal Values‬‬
‫قيم ثابتة رمزية وقيم التاريخ ‪ Date‬و ‪ Character‬تكون القيم داخل ’‘ مثل‪:‬‬
‫‬‫;‘‪v_ddate =:‘15-JAN-2005‬‬
‫;’‪v_name:=’ali‬‬
‫قيم ثابتة رقمية ‪ Numbers‬و يمكن أن تكون صحيحة أو كسرية مثل‪:‬‬
‫‬‫;‪v_id :=201‬‬
‫‪ .3‬العمليات ‪.Operations‬‬
‫ الضرب والقسمة (*‪)/ ,‬‬‫ األس والنفي (**‪) NOT,‬‬‫ العمليات المنطقية (‪)AND ,OR‬‬‫ الجمع والطرح (‪)- ,+‬‬‫‪ -‬عمليات المقارنة (‪)=,>,<,<=, <=, IS NULL, LIKE, BETWEEN, IN‬‬
‫الجمل التنفيذية في ‪PL/SQL‬‬
‫‪‬‬
‫التعليقات ‪: Comments‬‬
‫عند كتابة التعليقات‪:‬‬
‫ تعليقات السطر الواحد تكون بوضع (‪ )--‬في بداية جملة التعليق وتعني أن ما بعد هذه الجملة نص‬‫توضيحي‪.‬‬
‫ تعليقات السطور المتعددة تكون بوضع (*‪ )/‬في بداية التعليق ووضع (‪ )*/‬في نهاية التعليق‪.‬‬‫‪o‬‬
‫مثال‪:‬‬
‫‪…….‬‬
‫‪v_name varchar2(20) ; -- this variable used to hold the employee name‬‬
‫‪Begin‬‬
‫‪/* this code is used to read‬‬
‫‪The employee salary and calculate the annual salary‬‬
‫‪And print the annual salary‬‬
‫‪*/‬‬
‫‪…….‬‬
‫; ‪End‬‬
‫الوحدات المتداخلة (‪)Nested Blocks‬‬
‫‪ ‬الوحدات المتداخلة (‪)Nested Blocks‬‬
‫يمكن كتابة (‪ )Block‬داخل الجزء التنفيذي ألي (‪ )Block‬آخر وسيعامل على أنه جملة‬
‫تنفيذية‪ ,‬ويمكن أيضا كتابة (‪ )Block‬داخل جزء االستثناءات‪.‬‬
‫مجال المتغير‬
‫يمثل المنطقة‬
‫التي يمكن‬
‫التعامل مع‬
‫المتغير داخلها‬
‫مجال ‪x‬‬
‫مجال ‪y‬‬
‫‪...‬‬
‫;‪x BINARY_INTEGER‬‬
‫‪BEGIN‬‬
‫‪...‬‬
‫‪DECLARE‬‬
‫;‪y NUMBER‬‬
‫‪BEGIN‬‬
‫‪...‬‬
‫;‪END‬‬
‫‪...‬‬
‫;‪END‬‬
‫الوحدات المتداخلة (‪)Nested Blocks‬‬
‫في حالة تعريف‬
‫متغيرين بنفس‬
‫االسم في الوحدات‬
‫المتداخلة فإن‬
‫الوحدة (‪)Block‬‬
‫تتعامل مع المتغير‬
‫األقرب لها‬
‫‪...‬‬
‫;‪x BINARY_INTEGER‬‬
‫‪BEGIN‬‬
‫‪...‬‬
‫‪DECLARE‬‬
‫;‪x NUMBER‬‬
‫‪BEGIN‬‬
‫استخدام المتغير داخل هذه‬
‫‪...‬‬
‫الوحدة سيكون ل‬
‫;‪END‬‬
‫‪...‬‬
‫;‪END‬‬
)Nested Blocks( ‫الوحدات المتداخلة‬
:‫مثال‬

DECLARE
v_sal
NUMBER(7,2) := 60000;
v_comm NUMBER(7,2) := v_sal * .20;
v_message VARCHAR2(255) := ' eligible for commission';
BEGIN
DECLARE
v_sal
NUMBER(7,2) := 50000;
v_comm NUMBER(7,2) := 0;
v_total_comp NUMBER(7,2) := v_sal + v_comm;
output
BEGIN
v_message := 'CLERK not' || v_message;
END;
SALESMAN CLERK not eligible
v_message := 'SALESMAN'||v_message;
for commission
DBMS_OUTPUT.PUT_LINE (v_message );
END;
‫دليل البرمجة في ‪PL/SQL‬‬
‫(‪)Programming Guidelines‬‬
‫‪.1‬‬
‫‪.2‬‬
‫كتابة التوضيحات والتعليقات وذلك لتوضيح داللة المتغيرات وطريقة‬
‫عمل البرنامج‪.‬‬
‫استخدام حالة األحرف الصغيرة والكبيرة بناء على ما يلي‪:‬‬
‫الفئة‬
‫حالة األحرف‬
‫مثال‬
‫‪SQL‬جمل‬
‫كبيرة‬
‫‪SELECT, INSERT‬‬
‫الكلمات المحجوزة‬
‫كبيرة‬
‫‪DECLARE ,BEGIN, END‬‬
‫أنواع المتغيرات‬
‫كبيرة‬
‫)‪VARCHAR2(5), NUMBER(3‬‬
‫معامالت المتغيرات‬
‫صغيرة‬
‫‪g_id, v_sal‬‬
‫أسماء الجداول واألعمدة‬
‫صغيرة‬
‫‪emp, dept, ename‬‬
PL/SQL ‫دليل البرمجة في‬
)Programming Guidelines(
:‫الجدول التالي يبين طريقة تسمية المتغيرات بناء على نوع المتغيرات‬
‫مثال‬
‫طريقة التسمية‬
‫االسم‬
v_empno, v_sal
v_name
variables ‫المتغيرات‬
c_sal , c_tax
c_name
constants ‫الثوابت‬
emp_cursor
Name_cursor
cursors ‫المؤشرات‬
e_too_many
e_name
exception ‫االستثناءات‬
p_empno
p_name
‫متغيرات االستبدال‬
substitute variables
g_sal
g_name
global ‫المتغيرات العامة‬

PL/SQL ‫دليل البرمجة في‬
)Programming Guidelines(
.‫ استخدام اإلزاحات حتى يكون البرنامج واضح وسهل الفهم‬.3
:‫نالحظ الفرق أدناه‬
BEGIN
IF x=0 THEN
y:=1;
ELSE
y:=2;
END IF;
END;
BEGIN
IF x=0 THEN y:=1; ELSE y:=2; END IF;
END;
‫التفاعل مع الخادم‬
‫‪Oracle‬‬
)Select Statement( ‫جمل االسترجاع‬
:)Select Statement( ‫ كتابة جملة االسترجاع‬
.PL/SQL ‫ وجمل‬SQL ‫إن عملية استرجاع البيانات ومعالجتها تتطلب جمل‬
SELECT column name
INTO variable_name
FROM table
WHERE condition )‫; (الشرط‬
‫جمل االسترجاع (‪)Select Statement‬‬
‫‪‬‬
‫مثال‪:‬‬
‫‪‬‬
‫عند كتابة جمل االسترجاع يجب مراعاة ما يلي‪:‬‬
‫أن تنتهي جملة االسترجاع بفاصلة منقوطة (;)‬
‫يجب أن تحتوي جملة االسترجاع على ‪. INTO‬‬
‫عدد المتغيرات يجب أن يساوي عدد القيم الراجعة من جملة االسترجاع وكذلك نوع البيانات يجب أن يكون نفس نوع‬
‫البيانات الراجعة‪.‬‬
‫للتأكد من توافق البيانات مع بعضها نعرف المتغيرات باستخدام ‪. %TYPE‬‬
‫;‪v_deptno dept.deptno%TPYPE‬‬
‫;‪v_loc dept.loc%TPYPE‬‬
‫ال يشترط وجود ‪ WHERE‬ولكن يجب التأكد من العائد من جملة االسترجاع‪.‬‬
‫‪DECLARE‬‬
‫;)‪v_deptno NUMBER(2‬‬
‫‪v_loc‬‬
‫;)‪VARCHAR2(15‬‬
‫‪BEGIN‬‬
‫‪SELECT deptno, loc‬‬
‫‪INTO v_deptno, v_loc‬‬
‫‪FROM dept‬‬
‫;'‪WHERE dname = 'SALES‬‬
‫;‪END‬‬
‫‬‫‬‫‬‫‪-‬‬
‫‪-‬‬
‫معالجة البيانات باستخدام جمل ‪DML‬‬
‫‪‬‬
‫‪.1‬‬
‫تتم معالجة البيانات المخزنة بقاعدة البيانات باستخدام جمل ‪ DML‬وهي‪:‬‬
‫جمل اإلضافة ‪” : INSERT‬إضافة صف جديد في الجدول“‬
‫‪BEGIN‬‬
‫)‪INSERT INTO emp (empno, ename, job, deptno‬‬
‫;)‪VALUES (empno_sequence.NEXTVAL, 'HARDING', 'CLERK', 10‬‬
‫;‪END‬‬
‫‪ .2‬جمل التعديل ‪” : UPDATE‬تعديل القيم الموجودة في الجدول“‬
‫عند عمل جمل التعديل يجب استخدام ‪ WHERE‬حتى يتم بيان المعلومات الواجب تعديلها‪.‬‬
‫‪DECLARE‬‬
‫;‪v_sal_increase emp.sal %TYPE := 2000‬‬
‫‪BEGIN‬‬
‫‪UPDATE emp‬‬
‫‪SET sal = sal + v_sal_increase‬‬
‫; ‘‪WHERE job = 'ANALYST‬‬
‫;‪END‬‬
DML ‫معالجة البيانات باستخدام جمل‬
“‫ ”حذف صف من الجدول‬: DELETE ‫جمل الحذف‬
DECLARE
v_deptno emp.deptno %TYPE := 10 ;
BEGIN
DELETE FROM emp
WHERE deptno = v_deptno ;
END ;
.3
‫استخدام الدوال‬
‫‪ ‬الدوال التي يمكن استخدامها داخل وحدة (‪:)Block‬‬
‫‪ ‬دوال الصف الواحد في ‪SQL‬‬
‫ الدوال الرقمية ‪Number Functions‬‬‫ الدوال الرمزية ‪Character Functions‬‬‫‪ -‬دوال التاريخ ‪Date Functions‬‬
‫أمثلة‬
Number Functions ‫الدوال الرقمية‬
v_sal := ROUND(1.23456) ;  1
‫تقرب ما بعد الفاصلة‬
ROUND•
v_sal := TRUNC(1.23456) ;  1
‫تتجاهل ما بعد الفاصلة‬
TRUNC•
v_ num := SQRT(9);  3
‫تعطي الجذر التربيعي‬
SQRT•
‫أمثلة‬
Character Functions ‫الدوال الرمزية‬
SELECT INITCAP (enam) INTO v_name
FROM emp
WHERE empno =7788;
INITCAP•
‫تجعل الحرف األول من الكلمة حرف كبير‬
SELECT CONCAT(first_name, last_name)
INTO v_name FROM employee
WHERE empno =7788;
CONCAT•
..‫تربط بين كلمتين أو عمودين‬
SELECT LOWER (job), INITCAP (ename)
INTO v_ejop , v_ename
FROM employees
WHERE UPPER (job) = 'SALESREP'
LOWER•
‫تحول إلى أحرف صغيرة‬
UPPER•
‫تحول إلى أحرف كبيرة‬
‫أمثلة‬
SELECT ADD_MONTHS('01-JAN2005', 13) FROM dual;
SELECT MONTHS_BETWEEN('25-MAY2005',‘15-JAN-2005') FROM dual;
 4.32258065
Date Functions ‫دوال التاريخ‬
ADD_MONTHS•
‫تضيف عدد معين من األشهرعلى التاريخ المعطى‬
MONTHS_BETWEEN•
.‫تعطي عدد األشهر مابين تاريخين‬
‫استخدام الدوال‬
:‫دوال التحويل بين أنواع البيانات المختلفة‬

TO_CHAR ◄ CHARACTER ‫التحويل إلى قيم رمزية‬
.1
to_char( value, [ format_mask ], [ nls_language ] )
:‫ مثال تحويل تاريخ إلى قيم رمزية‬
to_char(sysdate, 'yyyy/mm/dd');
'2003/07/09‘
:‫ مثال تحويل أرقام إلى قيم رمزية‬
to_char(1210.73)
'1210.73 ‘

to_char(1210.73, '9999.9')
'1210.7‘

to_char(1210.73, '$9,999.00')
'$1,210.73'
TO_NUMBER ◄ NUMBER ‫التحويل إلى قيم رقمية‬
.1
to_number( string1, [ format_mask ], [ nls_language ] )
:‫مثال‬

to_number('1210.73')
1210.73
TO_DATE ◄ DATE ‫التحويل إلى قيم تاريخ‬
.1
to_date( string1, [ format_mask ], [ nls_language ] )
:‫مثال‬

to_date('2003/07/09', 'yyyy/mm/dd')
July 9, 2003.
‫استخدام المؤشر ‪(SQL Cursor) SQL‬‬
‫‪‬‬
‫‪.1‬‬
‫‪.2‬‬
‫هناك نوعان من المؤشرات ‪:‬‬
‫مؤشرات يقوم المستخدم بتعريفها (‪.)EXPLICIT CURSORS‬‬
‫مؤشرات ‪. )IMPLICIT CURSORS( SQL‬‬
‫‪ ‬مؤشرات ‪: )IMPLICIT CURSORS( SQL‬‬
‫المؤشر هو عبارة عن منطقة عمل خاصة تستعمل لتنفيذ أي جملة يقوم المستخدم بتنفيذها مثل‬
‫جمل االسترجاع أوالحذف أوالتعديل‪.‬ويتم التحكم بهذا المؤشر من قبل النظام بعكس المؤشرات‬
‫التي يقوم المستخدم بتعريفها‪.‬‬
‫‪‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫خصائص المؤشر ثالثة‪:‬‬
‫‪ SQL%ROWCOUNT‬تعيد عدد الصفوف التي تأثرت بآخر جملة ‪SQL‬‬
‫‪ SQL%FOUND‬تعيد (‪ )TRUE‬إذا تأثر صف أو أكثر بآخر جملة ‪ SQL‬عكسها‬
‫‪ SQL%NOTFOUND‬تعيد (‪ )TRUE‬إذا لم تؤثر آخر جملة ‪ SQL‬بأي صف‪.‬‬
‫‪ SQL%ISOPEN‬تعيد (‪ )TRUE‬إذا كان المؤشر مفتوح‪ .‬بالنسبة ل ‪SQL‬‬
‫‪ CURSORS‬دائما تكون القيمة الراجعة (‪ )FALSE‬ألن المؤشر يفتح ويغلق ضمنيا من‬
‫قبل النظام‪.‬‬
(SQL Cursor) SQL ‫مثال على استخدام المؤشر‬
SQL> VARIABLE rows_deleted VARCHAR2(30)
DECLARE
v_ordid NUMBER := 605;
BEGIN
DELETE FROM item
WHERE ordid = v_ordid;
:rows_deleted := (SQL%ROWCOUNT ||' rows deleted.');
END;
SQL >PRINT rows_deleted
‫الخالصة‬
‫‪ ‬تركيب الجمل (‪ )Syntax‬في ‪PL/SQL‬‬
‫‪ ‬بعض الدوال التي يمكن استخدامها في ‪PL/SQL‬‬
‫‪ .1‬دوال الصف الواحد‪.‬‬
‫‪ .2‬دوال التحويل‪.‬‬
‫‪ ‬المتغيرات في الوحدات المتداخلة‪.‬‬
‫‪ ‬كتابة جمل ‪ PL/SQL‬وجمل‪ SQL‬للتفاعل مع الخادم أوركال‪.‬‬
‫ جمل االسترجاع ومعالجة البيانات باستخدام ‪.DML‬‬‫‪ -‬استخدام مؤشرات ‪SQL‬‬