الانتقال إلى المحتوى
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.

متغيرات من نوع كائن

Featured Replies

بتاريخ:

بسم الله الرحمن الرحيم

أصدقائي أعضاء المنتدي الكرام /
كل عام وأنتم بخير بمناسبة حلول شهر رمضان الكريم

في الحقيقة أنا عندي مشكلة قد طرحتها في هذا المنتدي من قبل ولم أحد
يستجيب لي ، حيث إنها المشاركة الثانية بالنسبة لي :


السؤال هو ؟

كيف يتم تعريف متغير داخل PL/SQL أو Parameter من نوع كائن Object ،
أنظر الكود التالي:
-----------------------------------------------
Create Or Replace Function XX(A Table)
As
X VarChar2(20);
Y Table;
R View;
Begin

End;
-----------------------------------------------
هل يمكـن جعل متغير مثل Y من نوع جدول ، أو متغير مثل R من نوع عارض
أو ------ الي آخرة داخل أوراكل ، فالكود مستنتج من SQL-Server وغير
صحيح.

فإذا كانت الإجابة بنعم ، ما هي الطريقة

مع العلم أنني قد سمعت أن SQL-Server له القدرة علي هذا الأمر

========== مع الشكر

بتاريخ:
  • كاتب الموضوع

أخي Amgad ، تحية طيبة وبعد ،


في الحقيقة أنا تعاملت مع مثل هذا الموضوع ، ولكن سؤالي واضح ، ومن المثال التالي يمكن التوضيح أكثر :
------------------------------------------------------------------------

نفترض أن لدينا جدولين بهما أربعة حقول من نفس النوع ونفس الإسم ، علي النحو التالي
Enumber --> رقم الموظف
Fname --> إسم أول
Mname --> إسم أوسط
Lname --> إسم أخير


Create Or Replace Function Link_Field(TableName Table,ID_Num VarChar2) Return VarChar2
As
Type m_Record As Record
(
ID_Fname VarChar2(20),
ID_Mname VarChar2(20),
ID_Lname VarChar2(30)
);
lenRecord m_Record;
o_Name VarChar2(70);
Begin
Select Fname,Mname,Lname
Into lenRecord
From TableName
Where Enumber = ID_Num;
o_Name := lenRecord.ID_Fname || ' ' || lenRecord.ID_Mname || lenRecord.ID_Lname;

Reruen o_Name;
End XX;
/

إستدعاء البرنامج :

Select LNKF(Emp,Enumber) As Ename From Emp;

Select LNKF(EMP_1,Enumber) As Ename From Emp_1;

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

لاحظ أن هذا الكود غير سليم ، ولكن هو تخيلي لكيفية إقتباس أكثر من جدول داخل Parameters لإحدي الإجراءات أو الأغراض ، وهو أيضاً ما أرغب فية.





وشكراُ علي ردك أخي الكريم

بتاريخ:
  • كاتب الموضوع

هل السؤال صعب

:unsure: :unsure: :unsure: :unsure: :unsure: :unsure: :unsure: :o :o

  • بعد 1 شهر...
بتاريخ:

I did not understand you very will,
but
if you are trying to pass the table name throght a parameter to be used in the from clouse
so you are talking about dinamic sql search DBMS_SQL pacakge
but
if you are trying to pass a tabe data you souhd create an index by parameter.
i hope that helped you.

  • بعد 1 شهر...
بتاريخ:

اخي العزيز ..........
اذا كان قصدك عمل متغير من نوع جدول .......
-----------------------------------------------------------------------------------
V_Emp Emp%RowType ;
الان يمكن استخدام V_Emp بدلاً من استخدام الجدول نفسه
V_Emp.ename
V_Emp.sal
V_Emp.Deptno

بتاريخ:
  • كاتب الموضوع

أخي الكريم

أشكرك كثيراً علي الرد


بالفعل ، هذا الأمر ( V_Emp Emp%RowType ) سيحل لي الكثير من المشاكل


ولكن أخي الكريم أنظر معي ، المتغير خاص بجدول Emp فقط لا غير ، بمعني أنني سأستخدم هذا المتغير للتعامل مع
الكائن ( Emp ) ، ولكنني أرغب في متغير يمكن تحميل العديد من الكائنات به مثل :
Dep
Emp
Phone
Pro ------- الي آخرة


وأشكرك كثيراً علي هذه المعلومة الجميلة


وآسف علي التأخري للرد عليك

بتاريخ:

اليك هذا المثال لعله يفيدك

set serveroutput on
show errors
declare
vsex char(1):='&sex'; 
type emp_rec is record(eno emp.empno %type,ename emp.ename %type,sex emp.sex %type,
								  salary emp.sal %type,hiredate emp.hiredate %type,yearsofservice number(5,2));
type emp_table is table of emp_rec;
emp_col emp_table:=emp_table();
cursor c_emp is select empno,ename,sex,sal,hiredate,((sysdate-hiredate)/365) 
						from emp where sex=vsex order by sal desc;
cele integer;
m integer;
temp number(5,2):=0;
begin
emp_col.extend(4);
for rec in c_emp loop
emp_col(c_emp %rowcount):=rec;
exit when c_emp %rowcount >=4;
end loop;
cele:=emp_col.first;
for i in 1..emp_col.count loop
dbms_output.put_line('element ' || cele || ' is number:' || emp_col(cele).eno || ' name:' ||emp_col(cele).ename || 
				  ' sex :' || emp_col(cele).sex || ' salary:' || emp_col(cele).salary || ' hiredate:' || emp_col(cele).hiredate || 
				  ' years of service:' || emp_col(cele).yearsofservice);
cele:= emp_col.next(cele);
end loop;
cele:=emp_col.first;
for j in 1..emp_col.count loop
if temp < emp_col(cele).yearsofservice then
m:=cele;
temp:=emp_col(cele).yearsofservice;
end if;
cele:= emp_col.next(cele);
end loop;
cele:=m;
emp_col.delete(cele);
cele:=emp_col.first;
for i in 1..emp_col.count loop
dbms_output.put_line('element ' || cele || ' is number:' || emp_col(cele).eno || ' name:' ||emp_col(cele).ename || 
				   ' sex :' || emp_col(cele).sex || ' salary:' || emp_col(cele).salary || ' hiredate:' || emp_col(cele).hiredate ||
				   ' years of service:' || emp_col(cele).yearsofservice);
cele:= emp_col.next(cele);
end loop;
end;

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

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

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

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

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

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.