الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

PL/SQL Record

مغلق
بدأه honest في 24 أغسطس 2001 · 5 رد · 1,284 مشاهدة · في قواعد بيانات Oracle
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

[M-l][F=Navy]PL/SQL RECORD[/F][/M]

اخواني الأعزاء السلام عليكم ورحمة الله وبركاته

تطرقت في الموظوع السابق عن Cursor ولم اكمله بعد وقبل ان اكمله كان لزاماً علي ان اشرح PL/SQL Record حيث انه سيكون موجوداً عند اكمالي للشرح ولأن البعض قد لايعرف PL/SQL Record مما ينشأ عن ذلك عدم فهم للـ Cursor ومحتوى البرنامج .

PL/SQL Record تعريفه سهل جدا فهو عباره عن سجل للمجموعة حقول لجلب البيانات منها. ( اتمنى ان يكون التعريف واضح ) مثال ذلك :

.......
.......

 TYPE emp_record_type  IS  RECORD
     ( ename      VARCHAR2(10),
        job            VARCHAR2(9),
       sal             NUMBER(7,2));
emp_record      emp_record_type;
......
......

اصبح عندما تستدعي emp_record كأنك استدعيت الثلاث حقول السابقه معاً

هذه هي المهمه الأساسيه لها أختصار وتقليل البرنامج وسهولة التصحيح ... الخ .

والآن البعض لايعرف استخدام علامة TYPE%

هناك حقل اسمه SAL في الجدول EMP واردت ان تنشأ حقل آخر بنفس مواصفات ذلك الحقل تستخدم %TYPE مثال:

DECLARE
     TYPE emp_record_type IS RECORD
          (empno          NUMBER(4) NOT NULL :=100,
           ename          emp.ename%TYPE,       
           job             emp.job%TYPE);
     emp_record       emp_record_type;

من المثال السابق تتضح الرؤيه

لاحظ السطر الخاص بـ ename انت انشأت حقل وقلت له خذ جميع مواصفات الحقل ename الموجود في الجدول emp وأقصد بالمواصفات اي نوع الحقل وطوله ..الخ بدلا من كتابتها كما في الكود الأول.

والآن ننتقل للمرحله الأخرى ، ماذا لو كان عندك جدول يحتوي على عدة حقول وانت تريد ان تضع جميع الحقول في Record حتى تستريح من عناء كتابتها وتطبيق الأوامر على كل واحد منها !!!

الحل في ROWTYPE% مثال :

DECLARE
          emp_record                 emp%ROWTYPE;

لقد قام بجلب جميع الحقول بمواصفاتها ووضعها في الريكورد
ماذا لو اردت ان تستدعي حقل واحد من هذا السجل ؟ الحل

emp_record.sal                    مثلا لحقل الراتب

والله من وراء القصد

ابو عبدالآله

#2

الأخ العزيز أبو عبد الإله

جزالكم الله خير الجزاء على هذا المثال وأدعو الله تبارك وتعالى أن يكون في ميزان حسناتك يوم القيامة

وربنا يوفقك في شرح المزيد والمذيد إن شاء الله تعالى فنحن كثيرا ما نفتقر إلى هذه الأمثلة الرائعة

ــــــــــــــــــــــــــــــــــ

وآخر دعونا أن الحمد لله رب العالمين

#3

الاخ ابوعبدالاله

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

بارك الله فيك على هذه المعلومات المفيدة ونريد مثال على cursor للتعامل بين جدولين master & transaction

ولكم جزيل الشكر مسبقا

#5

بعد التحية

الأخ محمد عبد الله هذا مثال على ال cursor والربط بين جدولين

declare

cursor c is select e.empno,e.ename,e.sal,e.hiredate,d.dname from emp e,dept d

where e.deptno=&department_no and e.deptno=d.deptno;

v_empno number;

v_ename varchar2(50);

v_sal number;

v_hiredate varchar2(50);

v_dname varchar2(50);

begin

open c;

loop

fetch c into v_empno,v_ename,v_sal,v_hiredate,v_dname;

dbms_output.put_line(c%rowcount||' '||v_empno||' '||v_ename||' '||v_sal||' '||v_hiredate||' '||v_dname);

exit when c%notfound;

end loop;

close c;

end;

أخوك محمد الشنقيطي

#6

اخي محمد الشنقيطي

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

اشكرك على الاهتمام والرد وكتابة هذا المثال

والله يوفق ويبارك فيك ولاتنسانا بدعائك

هذا الموضوع مغلق.

مواضيع مشابهة