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

إنشاء Function يقوم بإرجاع جدول

Featured Replies

بتاريخ:

إخواني الكرام ، تحية طيبة وبعد ،

لدي سؤالين أتمني الإجابة عليهما :

السؤال الأول :

أتعامل مع SQL-Server ، وبداخلة يمكن إنشاء Function يقوم بإرجاء جدول ، مثال :


Create Function ListEmp(@ID_Dep BigInt) Returns Tabel
As
Return Select * From Emp Where Dep_No = @ID_Dep


ويمكن إستخدامة كما يلي :

Select * From dbo.XX(1)




هل هناك طريقة يمكن إنشاء نفس الإمكانيات من داخل أورال.


السؤال الثاني :

هناك أيضاً طريقة قد أعجبتني داخل SQL-Server وهي إنشاء جمله إدراج سجل داخل علامتي تنصيص وفي نهاية الإجراء يمكن تنفيذ الأمر كما يلي :


Sql = 'Insert Into Emp Values(1,Mostapha)'



Execute SP_ExecuteSQL Sql



هل هناك مثل هذة الإمكانية داخل أوراكل






وشكراً

  • بعد 3 شهور...
بتاريخ:
  • كاتب الموضوع

إخواني الكرام ، بقالي فترة طويلة ولم أحد يستجيب إلي ، فأعتقد أن ليس هناك أحد يعلم حل هذه المشكلة . وبفضل الله عز وجل ، عرضت الموضوع في منتدي الفريق العربي للبرمجيات قسم أوراكل ، وأخيراً وجدت الحل ، وسأرفقة حتي يستفيد منه أي شخص في المنتدي لم يعرفة :

1- جدول البيانات :

Create Table Emp
(
Emp_ID	Number(10),
Emp_Code VarChar2(20),
Emp_Name VarChar2(50),
Constraint PK_EMP Primary Key(Emp_ID)
)
/




2- بناء الحزمة والإجراء :

Create Or Replace Package PKG_REF
As
Type Cur_Emp Is Ref Cursor;
Procedure List_Emp(i_Start In Number,i_End In Number,
				  o_Emp Out Cur_Emp);
End;
/

--***************************************--

Create Or Replace Package Body PKG_REF
As
  Procedure List_Emp(i_Start In Number,
				  i_End   In Number,
				  o_Emp   Out Cur_Emp)
  Is
  Begin
 Open o_Emp For Select Emp_ID,Emp_Code,Emp_Name 
				From Emp 
				Where Emp_ID Between i_Start And i_End;
  End;
End;
/





3- إستخدام الإجراء :


-- Declare the variables;
  Var I_Start   Number;
  Var I_End	 Number;
  Var o_Emp   RefCursor;

-- Input the data.
  Begin
	:I_Start := 10;
	:I_End	:= 50;
  End;

-- Output Records --
  SQL> Call   Pkg_Ref . List_Emp(:I_Start,:I_End,_EMP);




وشكراً

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

إخواني الكرام ، تحية طيبة وبعد ،


أنا قمت بلإجراء إرتجاع بيانات من نوع Ref علي إجراء Procedure

ولكن حتي الآن لم أنجح في إرتجاع Ref علي غرض ، بحيث أن يكون بالشكل التالي :

Select * From List_Emp(1,5)

حيث أن List_Emp هو Function .


رجاء مساعدتكم


وشكراً

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

إخواني الكرام ، هل سؤالي صعب لهذه الدرجة !!!!!!!!!!!!!!!!

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

إخواني الكرام ، تحية طيبة وبعد ،

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

ولكن لي سؤال بسيط ، أري أن ليس أحد يستجيب إلي بأي جملة ؟ هل لأن موضوعي صعب
أم تافه لدرجة أن لم أحد يستجيب إلي ؟ أم أن هذا الأمر طبيعي ؟

إخواني ، أنا لم أحتاج سوي مساعدتكم ، وإذا كان هذا الموضوع قد إستفاد منها الكثر ، فلم
أحتاج سوي دعائكم لي ؟


ولكن هذا شيء يحيرني ، منذ بداية كتابتي للموضوع ، وأحب أن أوضح لكم بأنني إذا وجدت
مشاركة لست أعلم عنها شيء ، فلم أرد أي رد ، كي أترك مساحة للغير .


وشكرا


المثال :
--------------------------------------------------------------------------------------------------------------
-- جدول البيانات --
Create Table Employee
(
Emp_ID Number(10),
Emp_Code VarChar2(10),
Emp_Name VarChar2(25),
Constraint PK_Employee Primary Key(Emp_ID)
)
/
Insert Into Employee Values(1,'001','Ahmed','M',1100)
/
Insert Into Employee Values(2,'002','Mostapha','M',1250)
/
Insert Into Employee Values(3,'003','Usif','M',1400)
/
Insert Into Employee Values(4,'004','Sara','F',1000)
/
Insert Into Employee Values(5,'005','Tahany','F',1020)
/
Insert Into Employee Values(6,'006','Dalya','F',1130)
/
Insert Into Employee Values(7,'007','Mahmod','M',1290)
/
Insert Into Employee Values(8,'008','Farag','M',1800)
/
Commit
/

-- بناء كائنات ومصفوفات --
Create Or Replace Type T_EMP Is Object(Emp_ID Number(10),
Emp_Code VarChar2(10),Emp_Name VarChar2(20),
Emp_Sex VarChar2(8),Emp_Salary VarChar2(10))
/
Create Or Replace Type T_EMP_Table Is Table Of T_Emp
/

-- إنشاء غرض يقوم بإرجاع جدول --
Create Or Replace Function L_Emp Return T_EMP_Table
As
Cursor CUR_EMP Is Select Emp_ID,Emp_Code,Emp_Name,
(Case When Emp_Sex='M' Then 'Male' Else 'Feminize' End)
As Emp_Sex,To_Char(Emp_Salary,'9990.00') As Emp_Salary
From Employee Order By Emp_ID;
ID_Serial Number(10);
ID_Code VarChar2(20);
ID_Name VarChar2(30);
ID_Sex VarChar2(8);
ID_Salary VarChar2(10);
P_EMP T_EMP_Table;
Begin
P_EMP := T_EMP_Table();

Open Cur_Emp;

Fetch CUR_EMP Into ID_Serial,ID_Code,ID_Name,ID_Sex,ID_Salary;
While CUR_EMP%Found Loop
P_EMP.Extend;
P_EMP(P_EMP.Count) := T_Emp(ID_Serial,ID_Code,ID_Name,ID_Sex,ID_Salary);
Fetch CUR_EMP Into ID_Serial,ID_Code,ID_Name,ID_Sex,ID_Salary;
End Loop;

Return P_EMP;
End;
/

Select * From Table(L_Emp)
/

آسف علي عدم التنسيق ، لكن بصراحة مشعارف شاشة ( إضافة رد ) ، كان بها مشكلة غير معروفة

  • بعد 4 أسابيع...
بتاريخ:

السلام عليكم و رحمة الله و بركاتة
اولا جزاك الله خيرا علي هذا الموضوع الشيق

لماذا وضعت عبارة Fetch مرتين . ؟

بتاريخ:

السلام عليكم و رحمة الله و بركاتة
اولا جزاك الله خيرا علي هذا الموضوع الشيق

لماذا وضعت عبارة Fetch مرتين . ؟

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

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

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

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

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

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.