الانتقال إلى المحتوى

سؤال في : Composite Data Type


moh.sami

Recommended Posts

 

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

-----------------------------

كان لدي سؤال علي composite data type

 

الفرق بين

 recrod -1 

2- row type %

3- is a table of 

4- index by 

 

فاهم فيهم ( انهم يستخدموا لانشاء نوع جديد من الداتا بحيث انه اقدر اخزن فيه اكثر من نوع داتا) لكن يحصل عندي كنوع من الخلط ما بينهم وفي استخدمهم

يا ريت اللى يوضح لنا التسلسل الصحيح بينهم  حتى تعم الفائده علي الكل

 

وجزاكم الله خيرا

 

رابط هذا التعليق
شارك

يمكن الرد بعرض مثال من الجدول emp الموجود في المستخدم scott

مثلا لنأخذ معلومات موظف ما 

EMPNO 7369
ENAME SMITH
JOB CLERK
MGR 7902
HIREDATE Wed 17/12/1980
SAL 800.00
COMM 1.00
DEPTNO 20
 
هذه البيانات مجتمعة تدل على بيانات موظف واحد في سطر من أسطر الجدول وهو الـ record وهذه هي النقطة رقم 1
 
أما نوع البيانات لهذه الحقول فهي 
  empno    NUMBER(4),
  ename    VARCHAR2(10),
  job      VARCHAR2(9),
  mgr      NUMBER(4),
  hiredate DATE,
  sal      NUMBER(7,2),
  comm     NUMBER(7,2),
  deptno   NUMBER(2)
 
من الواضح أن كل حقل (عمود) له نوع مثلا empno  نوعه number بحجم 4 أرقام
 
وهذه الأنواع معا تشكل نوع سطر من الجدول emp
وهذه هي النقطة الثانية
 
مثال: الكود التالي مكرر، ففي المرة الثاني قمنا باستخدام rowtype لاحظ الفرق كيف أصبح حجمه أصغر
declare 
  v_empno emp.empno%type;
  v_ename emp.ename %type;
  v_job emp.job%type;
  v_mgr emp.mgr%type;
  v_hiredate emp.hiredate%type;
  v_sal emp.sal%type;
  v_comm emp.comm%type;
  v_deptno emp.deptno%type;
                
begin
  select * 
  into   v_empno,
  v_ename,
  v_job,
  v_mgr,
  v_hiredate,
  v_sal,
  v_comm,
  v_deptno
  from emp
  where empno =7369;
  dbms_output.put_line('Eployee name is: '|| v_ename);
end;


------------------------------------------
declare 
  v_emptype emp%rowtype; /*by using rowtype*/
  
begin
  select * 
  into v_emptype
  from emp
  where empno =7369;
    dbms_output.put_line('Eployee name is: '|| v_emptype.ename);
end;




 

في الكود السابق قمنا بوضع قيم السطر record or row لموظف واحد رقمه 7369 في متحول من نفس نوع الجدول emp ثم طباعة اسم الموظف.
 
 
لكن ماذا لو أننا نريد أن نضع قيم مجموعة أسطر لعدة موظفين في متحول واحد؟؟؟ يشبه جدول أو عدة أسطر من الجدول emp
 
لهذا يمكننا أن نستخدم العبارة is table of لبناء نوع جديد نعرفه نحن، كأن نقول مثلا أريد تعريف نوع بيانات جديد يشابه في بنيته نوع سطر في جدول emp ويمكن استخدام هذا النوع في كود plsql ومعالجة البيانات بشكل كتل bulk collect على سبيل المثال.
وهذه هي النقطة الثالثة
 
وبعد تعريف النوع الجديد فإنه يمكن استخدامه في متحول يدل عليه طبعا ستكون بنية المتحول كجدول يشبه الجدول emp ، ولكي نستطيع التمييز بين أسطر البيانات المخزنة في هذا المتحول يجب أن نربطه بمفتاح له عن طريق استخدام عبارة مثل index of integer
وهذه هي النقطة الرابعة التي ذكرتها في سؤالك.
 
 
استطيع وضع مثال لك لتوضيح ذلك أيضا لكني اعتقد أن بداية ردي على أول نقطتين أسهل من النقطة الثالثة والرابعة وستفهمه أكثر بمرور الأيام إن شاء الله عن طريق الممارسة والتعرض لكثير من طرق كتابة كود plsql، وستتذكر هذا الرد البسيط عند مواجتهك لمشكلة في الأداء بوجود عدد أسطر ضخم من البيانات تريد معالجتها، عندها ستضطر لقراءة أكثر تعمقا فلا تشغل بالك كثيرا بها الآن لكن أتمنى أن تكون الفكرة وصلت.
تم تعديل بواسطة sam_t
رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية