الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

سؤال في : Composite Data Type

Featured Replies

بتاريخ:

 

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

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

كان لدي سؤال علي 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

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.