قواعد المشاركة في المنتدى

(منتدى الأكسس) الموضوع:مشروع برنامج فواتير و مخازن تحت الانشاء بواسطة: (د.كاف يار) :: (قسم الاعلانات) الموضوع:مظلات وسواتر المسابح والفلل مؤسسه سواتر ومظلات نجد باقل الاسعار 0533313568 بواسطة: (مظلات روعه) :: (منتدى الأكسس) الموضوع:تقرير الرواتب في برنامجي بواسطة: (leath_86) :: (قسم التطوير والاقتراحات) الموضوع:افتتاح أقسام جديدة بواسطة: (مبرمج مبرمج) :: (قسم الاعلانات) الموضوع:تأجير خيم لجميع مناسبات افراح و اعراس وعزاء ومؤتمرات ولجميع مناسبات بواسطة: (ضيااء) :: (منتدى مبرمجي Microsoft Visual VB.NET) الموضوع:دورة في LINQ To DataSet بواسطة: (كينج دمنهور) :: (أخبار التكنولوجيا) الموضوع:مباراة الزمالك والاسماعيلي بواسطة: (ahmady sofa1445) :: (منتدى الأكسس) الموضوع:برنامج مستودع صرف بواسطة: (د.كاف يار) :: (منتدى الأكسس) الموضوع:مشكلة عند فتح ملف أكسس 2007 على اصدار 2013 بواسطة: (startnet) :: (قسم الاعلانات) الموضوع:مستشفى سند رائدة التعليم الطبي المستمر الارشادات والتوصيات الحديثة لجلطات للقلب بواسطة: (اسامة الاحمر) :: (قسم الاعلانات) الموضوع:اسعار يونيفورم حفلات الخريجين -شركة السلام لليونيفورم 01223182572 بواسطة: (fareda) :: (قسم الاعلانات) الموضوع:شركة السلام لليونيفورم- افضل منتج واحسن سعر تنافسي - 01118689995 - 01223182572 بواسطة: (fareda) :: (منتدى برمجة الألعاب) الموضوع:برنامج مبيعات ومشتريات ومخازن المساعد الفني لجميع الانشطة التجارية بواسطة: (مكتب الشروق الفني) :: (قسم الاعلانات) الموضوع:يونيفورم uniforms -اسعار تنافسية -شركة السلام لليونيفورم 01223182572 بواسطة: (fareda) :: (قسم الاعلانات) الموضوع:يونيفورم مدارس – يونيفورم حفلات التخرج -شركة السلام لليونيفورم 01118689995 بواسطة: (fareda) :: (قسم الاعلانات) الموضوع:يونيفورم كافيهات – يونيفورم شركات -شركة السلام لليونيفورم 01118689995 بواسطة: (fareda) :: (قسم الاعلانات) الموضوع:اسعار يونيفورم – اجود الخامات بأقل الاسعار -شركة السلام لليونيفورم 01118689995 بواسطة: (fareda) :: (قسم الاعلانات) الموضوع:السلام يونيفورم لتوريد الزى الموحد - اسعار خاصه للكميات - 01223182572 - 01118689995 بواسطة: (fareda) :: (قسم الدعم الفني) الموضوع:شركة نقل عفش جدة الان في السعودية بواسطة: (ليان عمر) :: (منتدى الأكسس) الموضوع:اريد اضافة حقل السعر price ليظهر السعر تلقائياً في النموذج بواسطة: (أبو تسنيم)


راديو القرآن

المواضيع المثبته: (منتدى Microsoft SQL Server) الموضوع:تابعوا دروس sql2000 بواسطة: (dody) :: (منتدى الكتب و المقالات) الموضوع:الجديد في Office Access 2007 بواسطة: (عبد الله الثبيتي) :: (منتدى ADO.NET العام) الموضوع:الطريقة السهلة لربط سي شارب بقاعدة بيانات اكسيس بواسطة: (kal7hos) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:جمل استعلام بواسطة: (وليد القدسي) :: (منتدى Microsoft Excel) الموضوع:مكتبة اكسيل كاملة - عربى - انجليزى بواسطة: (junkbki) :: (منتدى مبرمجي ASP) الموضوع:مشروع تخرج القرية الذكية المصرية بواسطة: (caco) :: (قسم الدروس و الدورات) الموضوع:دوره مجانيه لاحتراف الدوت نت بواسطة: (alaa gomaa) :: (منتدى C و C) الموضوع:دورة السي بلس بلس بواسطة: (مصطفي البارودي) :: (منتدى Microsoft Excel) الموضوع:شرح دوال الاكسيل كلِ على حده بواسطة: (ramies) :: (منتدى برمجة الجرافكس) الموضوع:الجزء الاول من دروس تعلم GDI بواسطة: (alaa gomaa) :: (منتدى ADO.NET العام) الموضوع:الكامل في قواعد البيانات مع VB.net بواسطة: (المهندس عدي) :: (منتدى أجاكس(Asynchronous JavaScript and XML)) الموضوع:نبذة مختصرة عن تعريف تقنية أجاكس بواسطة: (عبدالله جابر شقليه) :: (منتدى أنظمة الشبكات وأمنها) الموضوع:أنواع الشبكات الحاسوبية بواسطة: (مرحبا الساع) :: (منتدى مبرمجي ASP) الموضوع:تحزين سجلات داخل ملفات اكسل و xml وورد ..إلخ بواسطة: (عبدالله جابر شقليه) :: (منتدى Microsoft Visual Basic) الموضوع:حصريا Microsoft Visual Studio 6.0 كاملة بواسطة: (Max Bayne) :: (منتدى Microsoft SQL Server) الموضوع:مراحل تصميم قاعدة بيانات ناجحة بواسطة: (m.atassi) :: (منتدى Microsoft SQL Server) الموضوع:يومياً أسئلة sql server مجاناً بواسطة: (m.atassi) :: (منتدى التصميم والجرافيكس) الموضوع:سلسلة دروس الفلاش بواسطة: (مبرمجة فلسطينية) :: (قسم الدروس و الدورات) الموضوع:دورة مجانية في الفجوال بيسك دوت نيت و خاصة بالمبتدئين بواسطة: (ITPROGRAMMER) :: (منتدى Microsoft SQL Server) الموضوع:كتب SQL server بواسطة: (m.atassi)

عدد الصفحات : 2  1  2   > » موضوع مغلق إضافة موضوع جديد

> كيفية ربط الأوراكل مع asp.net,شرح لكيفية ربط procedure وال function
Bookmark and Share
تقييم الموضوع Label معدل التقيم:5
مشاركةالأحد,09/ذو الحجة/1426 هـ,03:51 مساءً
المشاركة #1

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



السلام عليكم ورحمة الله وبركاته
سوف أقوم بوضع لكم دروس لكيفية ربط الأوراكل مع ال asp.net لكيفية التعامل مع procedure و function الأوراكل.
لعملية ربط الأوراكل مع ال asp.net سوف نقوم باستخدما namespace(System.Data.OracleClient)  والتي تتعامل مع اصدار أوراكل 9i وما فوق.
وهنا سوف أضع لكم الكلاسس التي سوف نتعامل بها من خلال System.Data.OracleClient.
1-OracleCommand:هي مجموعة من جمل ال sql من stored procedure يتم تنفيذها على قاعدة بيانات الأوراكل.
2-OracleConnection:تستخدم لفتح الاتصال مع قاعدة بيانات الأوراكل وغلقها.
3-OracleParameter:وهي المتغيرات التي يتم إسنادها إلى OracleCommand من أجل وضع القيم للحقول.
4-OracleParameterCollection: تحتوي على مجموعة من المتغيرات.
5-OracleType: يتم من خلالها تحديد نوع حقول المتغيرات المسندة إلى OracleCommand وتركيبها.
عندما تود الاتصال بقاعدة بيانات الأوراكل يجب أن يتم إضافة ملف ال DLL إلى المشروع وهو System.Data.OracleClient.dll ، ويتم إضافته كما هو موضع في الصور التالية:
1- اذهب إلى Solution Exploer
ثم قوم بالضغط بالزر الأيمن على المشورع وقوم باختيار Add reference كما في الصورة التالية:


2- سوف تظهر لك نافذة جديدة ، اذهب إلى tab وقوم باختيار .NET واختار منها System.Data.OracleClient، كما في الصورة التالية:

الآن لاستخدام ال name space (System.Data.OracleClient) ضمن مشروعك قوم بعمل imports System.Data.OracleClient كالتالي:

 كود
using System.Data.OracleClient;'C#
Imports System.Data.OracleClient 'VB.NET


قوم بإضافة الاتصال بقاعدة البيانات كالتالي:
 كود
OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");'C#
Dim conn As OracleConnection = New OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;") 'VB.NET

في المشاركة التالية سوف أقوم بشرح كيف يتم عمل عمليات على ال Oracle باستخدام ال procedure وال function.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأحد,09/ذو الحجة/1426 هـ,04:12 مساءً
المشاركة #2

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



الآن سوف أقوم بوضع مثال من أجل كيفية إرجال البيانات من Stored procedure.
قوم بإنشاء ال procedure التاالية من أجل إرجاع مجموع السجلات:
CREATE OR REPLACE PROCEDURE count_arabmoheet_members
(
				reccount OUT NUMBER
)
IS
BEGIN
				SELECT COUNT(*) INTO reccount
				FROM members;
END count_arabmoheet_members;

لكيفية إسترجاع مجموع السجلات المرجعة من ال Stored procedure.
1- قوم بإنشاء الكائن OracleCommand، حيث يتم وضع به خاصية ال Connection وال CommandText لإسناد لها اسم ال Stored procedure و والخاصية CommandType.StoredProcedure، كالتالي:
 كود
'C#
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "count_arabmoheet_members";
cmd.CommandType = CommandType.StoredProcedure;
'Vb.NET
Dim cmd As OracleCommand = New OracleCommand
cmd.Connection = conn
cmd.CommandText = "count_arabmoheet_members"
cmd.CommandType = CommandType.StoredProcedure

2- سوف نقوم بإنشاء الكائن OracleParameter والذي يستخدم من أجل إدخال القيم واستخراجها إلى Stored procedure، كالتالي:
 كود
'C#
cmd.Parameters.Add("reccount", OracleType.Number);
cmd.Parameters["reccount"].Direction = ParameterDirection.Output;
'VB.NET
cmd.Parameters.Add("reccount", OracleType.Number)
cmd.Parameters("reccount").Direction = ParameterDirection.Output

كما تشاهدون أنه تم وضع متغير reccount وهو المتغير الذي تم تعريفه في Stored procedure(count_arabmoheet_members) والذي يحمل مجموع السجلات المرجعة من عملية الاستعلام، وتم وضعه له ال direction قيمته ParameterDirection.Output أي أن عباره عن متغير يحتوي على نتائج مرجعه من ال Stored procedure.
ومن أجل الحصول على المستخرجات يمكنكم بناء DataSet, DataTable, or DataReader ولكن في مثالنا هذا لن نحتاج لاستخدامهم لأنه فقط قيمة واحده التي سوف تعود لنا وهي عدد السجلات فلذلك سوف نستخدم فقط الأمر ExecuteNonQuery، كالتالي:
 كود
'C#
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
'VB.NET
conn.Open
cmd.ExecuteNonQuery
conn.Close

من أجل طباعة عدد السجلات كالتالي:
 كود
'C#
response.write (cmd.Parameters["reccount"].Value);
'VB.NET
response.write(cmd.Parameters("reccount").Value)

في الدرس التالي سوف أقوم بوضع ما هي ال Methods المستخدمه لاستخراج البيانات في الكلاسس OracleCommand.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأحد,09/ذو الحجة/1426 هـ,04:47 مساءً
المشاركة #3

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



سوف أقوم الآن بسرد لكم ال Methods المستخدمه لإسترجاع الباينات من الكلاسس OracleCommand:
1-ExecuteReader:تستخدم لبناء OracleDataReader عن طريق تنفيذ ال Stored procedure لاسترجاع مجموعه من البيانات.
2-ExecuteNonQuery:تستخدم لتنفيذ الاستعلام وال procedure التي لا تسترجع مجموعة من السجلات فقط التي تسترجع عدد السجلات التي تم التأثير عليها.
3-ExecuteOracleNonQuery:تستخدم لتنفيذ الاستعلام لاسترجاع عدد السجلات التي تم التأثير عليها، وهذه ال method تستخدم أيضاً OracleString parameter من أجل استرجاع قيمة ID لآخر سجل تم التعديل عليها عن طريق (UPDATE, INSERT, or DELETE ).
4-ExecuteScalar:تستخدم لاسترجاع قيمة أول حقل من أول سجل من مجموعى النتائج وتكون البيانات من نوع (NET Framework).
5-ExecuteOracleScalar: تستخدم مثل ExecuteScalar لكن يكون نوع البيانات على هيئة OracleType التي يتم تحديها.

ملاحظة: المنهج ExecuteOracleNonQuery() من الكلاس OracleCommand المستخدمة لتنفيذ جمل الاستعلام وال Stored procedure التي لا تقوم باسترجاع أي سجل، هذا المنهج يوقم باسترجاع قيمة من نوع int متمثلة من خلال عدد السجلات التي تم التأثير عليها من خلال الأوامر (UPDATE, INSERT, and DELETE) غير ذلك تقوم باسترجاع -1،اذا قمت بتنفيذ جمله استعلام سواء " ادخال, حذف,تعديل" وهذه الجمله قامت بالتعديل على او اضافه سجل " واحد " فقط , فان هذه الMethod تسترجع لك جمله OracleString لها رقم Uniquely "مميز" تستطيع من خلال الرقم هذا ان تستطيع التعرف على هذا السجل وتتمكن من معرف التغيير الذى احدثه فى قاعدة البيانات،يمكنك استخدام هذه القيمه لتحسين اداء الsubsequent المتعلقه بتلك الqueries
أيضا يمكنكم استخدام المنهج ExecuteNonQuery() والتي تعمل مثل ExecuteOracleNonQuery() لكنها لا تقوم باسترجاع (unique row identifier) كما سبق وذكرته لكم في الأعلى.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأحد,09/ذو الحجة/1426 هـ,05:25 مساءً
المشاركة #4

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



المثال التالي سوف نقوم بعمل Stored procedure من أجل حذف بعض السجلات من جدول ال Topci عن طريق اسناد قيمة واحده لـ procedure، والتي لن تسترجع أي بيانات:
CREATE OR REPLACE PROCEDURE delete_topic
(
				T_no NUMBER
)
IS
BEGIN
				DELETE FROM topic
				WHERE topic_no = T_no;
END delete_topic;
وهذا الكود التالي من أجل تنفيذ ال
Stored procedure في الدوت نت:
 كود
'C#

OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");


OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "delete_topic";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("T_no", OracleType.Number).Value = 102;

conn.Open();
int rowsAffected = cmd.ExecuteNonQuery();
conn.Close();

response.write ("عدد السجلات التي تم التأثير عليها: " + rowsAffected);

'VB.NET

Dim conn As OracleConnection = New OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;")
Dim cmd As OracleCommand = New OracleCommand
cmd.Connection = conn
cmd.CommandText = "delete_topic"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("T_no", OracleType.Number).Value = 102
conn.Open
Dim rowsAffected As Integer = cmd.ExecuteNonQuery
conn.Close
response.write("عدد السجلات التي تم التأثير عليها: " + rowsAffected)



--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأحد,09/ذو الحجة/1426 هـ,05:38 مساءً
المشاركة #5

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



عندما نود أن نقوم باسرجاع قيمة واحد من لقيمة حقل من خلال الاستعلام يجب أن نستخدم لذلك ال Function وليس ال Stored procedure لأنها لا تقوم باسترجاع القيم كما التي يتم استخدامها في T-SQL.
المثال التالي سوف نقوم بإنشاء Function من أجل إرجاع قيمة واحده فقط كالتالي:
CREATE OR REPLACE FUNCTION get_members_email (
				p_members_no NUMBER
)
RETURN VARCHAR2
IS p_email VARCHAR2(25);
BEGIN
				SELECT EMAIL INTO p_email FROM members
				WHERE members_no = p_members_no;
				
				RETURN p_email;
END get_members_email;

ولتنفيذ ال Function في الدوت نت يتم تنفيذها مثل عند استخدام ال Stored procedure، ونستخدم معها ParameterDirection.ReturnValue من أجل عملية استرجاع البيانات من خلال ال Function، وشاهدو الكود التالي للقيام بذلك:
 كود
'C#
OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");


OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "get_members_email";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("p_members_no", OracleType.Number).Value = 101;
cmd.Parameters.Add("p_email", OracleType.VarChar, 25).Direction =ParameterDirection.ReturnValue;

conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

response.write ("عنوان البريد الإلكتروني: " + cmd.Parameters["p_email"].Value);
'VB.NET

Dim conn As OracleConnection = New OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;")
Dim cmd As OracleCommand = New OracleCommand
cmd.Connection = conn
cmd.CommandText = "get_members_email"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("p_members_no", OracleType.Number).Value = 101
cmd.Parameters.Add("p_email", OracleType.VarChar, 25).Direction = ParameterDirection.ReturnValue
conn.Open
cmd.ExecuteNonQuery
conn.Close
response.write("عنوان البريد الإلكتروني: " + cmd.Parameters("p_email").Value)


وفي الدروس القادمة سوف أقوم بشرح كيف ستم استرجاع مجموعة من السجلات وذلك عن طريق استخدام REF CURSORS ضمن ال Packages.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالاثنين,10/ذو الحجة/1426 هـ,05:59 مساءً
المشاركة #6

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



Result Sets and REF CURSORS
تستخدم ال REF CURSOR data type للعمل مع مجموعة نتائج ال Oracle.
ال REF CURSOR عباره عن مؤشر من خلال استرجاع السجلات في بيئة PL/SQL query، وهي ليست كأي مؤشر عادي، حيث أنها تعتبر كمتغير، وهو مرجع للمؤشر الذي تستطيع من خلاله الربط مع نتائج سجلات مختلفة خلال عملية التنفيذ.
استخدام REF CURSOR كمتغير خارجي لتمرير قيم السجلات من بنية Oracle إلى البرنامج التطبيقي المستخدم.
يتم تعريف المتغير الخارجي من خلال OracleType.Cursor في عملية الاستدعاء من خلال البرنامج التطبيقي للوصول إلى سجلات النتائج المؤشر عليها من خلال REF CURSOR.
ال OracleConnection يجب يجب أن تبقى مفتوحة خلال استخدام ال REF CURSOR.

Packages
ال Packages هي عبارة عن تعريف مسبق لمجموعة من ال procedures و ال Funcation التي تستطيع استخدامها فيما بعد في برنامجك التطبيقي.
المفهوم العام باستخدامه من خلال إنشاء أوامر ال PL/SQL والتي تستطيع بناء ال Packages ومحتوياته من ال procedures و ال Funcation واستخدامها لاحقاً في برنامجك من خلال الاستدعاء لاسم Package ومن ثم التحديد على أي ل procedures أو ال Funcation المراد الوصول لها.
قد لا تجد مكافئ لي ال Packages في أي برنامج قواعد بيانات آخر حيث أنك لن تجدها من خلال استخدام T-SQL.

ال Packages بها جزئين مهمين:
1- Specification (or spec): وهي عبارة عن مجمع لي تعريف مجموعة من ال procedures و ال Funcation، وفي منطقة ال Header يتم تعريف مجموعة من المتغيرات التي سيتم استخدامها خلال كتابة ال procedures و ال Funcation، ولكي تكون الأمور أكثر وضوحا نستطيع أن نشبه ال Package بأي class مشابهة في لغة ال C و C++.
2- Body:هو الذي يحتوي على ال procedures و ال Funcation التي سنقوم بكتابتها والمعرفة سابقا في ال Header.

والأن سنقوم بتوضيح أنوع المتغيرات االتي سوف تستخدم من خلال كتابة ال procedures أو ال Funcation، وهم ثلاث أنواع كالتالي:
1-IN:وهوي عباره عن متغيرات يتم إدخالها من خلال البرنامج التطبيقي إلى ال procedures أو ال Funcation من خلال استخدام لغة ال PL/SQL(كطريقة تمرير قيمة إلى متغير داخل ل procedures أو ال Funcation لاستدعائه).
2- OUT:هي القيمة التي يتم تصديرها من خلال ال procedures أو ال Funcation إلى البرنامج التطبيقي.
3- INOUT:هي المتغير الذي يتم تمرير إمن خلال البرنامج التطبيقي لى ال procedures أو ال Funcation ومن ثم يتم التعديل عليها داخل Packages وإرجاع القيمة مرة آخرى إلى البرنامج التطبيقي.

وفي الدرس القادم سوف أتطرق لوضع أمثلة حول ما تم توضيحية أعلاه.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالاثنين,10/ذو الحجة/1426 هـ,06:13 مساءً
المشاركة #7

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



في المثال التالي سوف أقوم بوضع لكيفية استخدام ال package لكيفية تعريف بها مجموعة من ال Stored procedure وال Function:

CREATE OR REPLACE PACKAGE CRUD_LOCATIONS AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE GetLocations (cur_Locations OUT T_CURSOR);
PROCEDURE UpdateLocations (p_location_id IN NUMBER,
				p_street_address IN VARCHAR2,
				p_postal_code IN VARCHAR2,
				p_city IN VARCHAR2,
				p_state_province IN VARCHAR2,
				p_country_id IN CHAR);
PROCEDURE DeleteLocations (p_location_id IN NUMBER);
PROCEDURE InsertLocations (p_location_id OUT NUMBER,
				p_street_address IN VARCHAR2,
				p_postal_code IN VARCHAR2,
				p_city IN VARCHAR2,
				p_state_province IN VARCHAR2,
				p_country_id IN CHAR);
END CRUD_LOCATIONS;


وهذا ما يتم تعريفه داخل ال package Header.

والمثال التالي يوضح ألية استخدام التعريفات داخل ال Header وبرمجتها داخل ال Body:
CREATE OR REPLACE PACKAGE BODY CRUD_LOCATIONS AS
---إسترجاع البيانات من خلال REF CURSOR-------
PROCEDURE GetLocations (cur_Locations OUT T_CURSOR)
IS
BEGIN
				OPEN cur_Locations FOR
				SELECT * FROM LOCATIONS;
END GetLocations;

-------------التعديل على البيانات--------------
PROCEDURE UpdateLocations (p_location_id IN NUMBER,
				p_street_address IN VARCHAR2,
				p_postal_code IN VARCHAR2,
				p_city IN VARCHAR2,
				p_state_province IN VARCHAR2,
				p_country_id IN CHAR)
is 
update Locations set street_address=p_street_address,
postal_code=p_postal_code,city=p_city,
state_province=p_state_province,
country_id=p_country_id where location_id=p_location_id;
end UpdateLocations;

--------حذف البيانات--------
PROCEDURE DeleteLocations (p_location_id IN NUMBER)
is
delete from Locations where location_id=p_location_id;
end DeleteLocations;
-----إضافة البيانات--------------------
PROCEDURE InsertLocations (p_location_id OUT NUMBER,
				p_street_address IN VARCHAR2,
				p_postal_code IN VARCHAR2,
				p_city IN VARCHAR2,
				p_state_province IN VARCHAR2,
				p_country_id IN CHAR)
is 
insert into (location_id,street_address,postal_code,city,
state_province,country_id)
values 
(p_location_id,p_street_address,p_postal_code,p_city,
p_state_province,p_country_id);

END InsertLocations;

END CRUD_LOCATIONS;


وفي الدرس القادم سوف أوضح كيف يتم استخدامها من خلال ال الدوت نت.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالاثنين,10/ذو الحجة/1426 هـ,06:53 مساءً
المشاركة #8

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



المثال التالي سوف أوضح استخدام الباكج ضمن الدوت نت وكيفية وصول التطبيق إلى البيانات المطلوبة في قاعدة بيانات أوراكل من خلال البروسجير (GetLocations) والتي تم تعريفها وشرحها في الدرس السابق ضمن الباكج.

في هذا المثال سوف نستخدم ال Datareader من أجل جلب البيانات:
 كود

'C#
OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "CRUD_LOCATIONS.GetLocations";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("cur_Locations", OracleType.Cursor).Direction =ParameterDirection.Output;


conn.Open();
OracleDataReader dr = cmd.ExecuteReader();

// output the results and close the connection.
while(dr.Read())
{
for(int i = 0; i < dr.FieldCount; i++)
response.write(dr[i].ToString() + ";");
response.write("<br>");
}
conn.Close();

'VB.NET
Dim conn As OracleConnection = New OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;")
Dim cmd As OracleCommand = New OracleCommand
cmd.Connection = conn
cmd.CommandText = "CRUD_LOCATIONS.GetLocations"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("cur_Locations", OracleType.Cursor).Direction = ParameterDirection.Output
conn.Open
Dim dr As OracleDataReader = cmd.ExecuteReader
While dr.Read
 Dim i As Integer = 0
 While i < dr.FieldCount
   response.write(dr(i).ToString + ";")
   response.write("<br>")
 End While
 response.write("<br>")
End While
conn.Close


كما تلاحظون في الكود التالي كيف تم استخدام الباكج وتحديد أي إجراء سوف نقوم بعمل العمليات عليه:
 كود
cmd.CommandText = "CRUD_LOCATIONS.GetLocations"

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

 كود
cmd.Parameters.Add("cur_Locations", OracleType.Cursor).Direction = ParameterDirection.Output

هنا سوف يتم تمرير المتغير cur_Locations الذي تم تعريفه في الباكج ضمن البروسجير GetLocations.

بالنسبة لباقي الإجرائات لكيفية العمل عليها نفس ما قمت شرح من قبل لكيفية حذف السجلات يتم استخدام نفس الطريقة لعملية ترمير المتغيرات مع الأخد بعين الاعتبار بأن كل بروسجير أو فانكشن ضمن package Header يتم الوصول له من خلال تعريف اسم الباكج أولا ومن ثم اسم ال Procedure أو ال Function المراد استخدامه كما تم توضحيه أعلاه في المثال السابق.
ملاحظة: الميزة هنا أنك تتعامل مع ال Procedure أو ال Function كأنك تتعامل مع object من class.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالخميس,13/ذو الحجة/1426 هـ,10:18 صباحاً
المشاركة #9

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



Stored Procedures That Return a Single Value

ال ExecuteOracleScalar() method من OracleCommand class تستخدم لتنفيذ جمل ال SQL و Stored procedure التي تقوم باسترجاع قيمه واحد كا OracleType data type.
اذا كان الأمر قام بعملية استرجاع نتائج فأن ExecuteOracleScalar() method سوف تسترجع قيمة أول حقل من الصف الأول.
إن ال ExecuteOracleScalar() method تسترجع قيمة فارغة في حالة إذا كانت REF CURSOR سوف تسترجع قيمة أول حقل لأول صف عندما تشير أليها REF CURSOR.

ال ExecuteOracleScalar() method من OracleCommand class هي شبيهة لل ExecuteOracleScalar() method لكناه تسترجع البيانات كأ .NET Framework data type.
رغم كل ما تم ذكره في الأعلى فأنه ولا واحده من هذ methods مفيدة للتعامل مع Stored procedure.
ال Oracle stored procedures لا مكنها استراج القيمة كأجزاء مرجهة من الجمل، فقط عن طريق متغيرات خارجية يتم عمل ذلك، وأيضا لا تستطيع من اسرتجاع مجموعة من النتائج اله باستثناء المتغيرات الخارجية لل REF CURSOR .

أنستطيع من استرجاع القيم فقط عن باستخدام Oracle function عن طريق RETURN parameter وليس باستخدام أحد ExecuteScalar methods.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالخميس,13/ذو الحجة/1426 هـ,10:36 صباحاً
المشاركة #10

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



Sequences
ال Sequences تستخدم في الأوراكل لتوليد رقم unique بدلاً من data type uniqueidentifier المستخدمة في SQL server.
الهدف من استخدام Sequences التي تقوم بتوليد رقم unique من أجل استخدامه كمفتاح أساسي (PK) للجدول، وهي تستخدم من أجول توليد أرقام (Auto number).

الأن في المثال التالي سوف نقوم بعملية كيف يتم انشاء Sequences في الأوراكل
create SEQUENCE LOCATIONS_SEQ
				INCREMENT BY 100
				START WITH 1
				MAXVALUE 9900
				MINVALUE 1
				NOCYCLE 
				NOCACHE
				NOORDER


في المثال التالي سوف نعرف كيف يتم استدعاء SEQUENCE التي قمنا بإنشاءها أعلى :
create OR REPLACE PROCEDURE ADD_LOCATION (
				p_location_id OUT NUMBER,
				p_street_address IN VARCHAR2,
				p_postal_code IN VARCHAR2,
				p_city IN VARCHAR2,
				p_state_province IN VARCHAR2,
				p_country_id IN CHAR
)
AS
BEGIN
				insert INTO LOCATIONS (
							 LOCATION_ID,
							 STREET_ADDRESS,
							 POSTAL_CODE,
							 CITY,
							 STATE_PROVINCE,
							 COUNTRY_ID)
				VALUES (
							 LOCATIONS_SEQ.NEXTVAL,
							 p_street_address,
							 p_postal_code,
							 p_city,
							 p_state_province,
							 p_country_id
;
				
				select LOCATIONS_SEQ.CURRVAL INTO p_location_id FROM DUAL;
END ADD_LOCATION;


تشاهدون أنه وضعنا القيمة LOCATIONS_SEQ.NEXTVAL للحقل LOCATION_ID في جملة الإضافة التي تم وضعها داخل ال Stored procedure، فهكذا يتم استخدام ال Sequences حيث نقوم بوضع اسم ال Sequence مع وضع نقطه ثم NEXTVAL.
select LOCATIONS_SEQ.CURRVAL INTO p_location_id FROM DUAL;


هنا تم عمل جملة استعلام لل Sequence من الجدول DUAL بحيث سوف تحضر لنا القيمة الحالية التي تم تولديها لل LOCATIONS_SEQ ويتم تخزينها داخل المتغير p_location_id.

الأن سوف أضع لكم الكود الدوت نت من أجل عملية استدعاء البروسجير لكيفية الإضافة واسترجاع قيمة ال LOCATIONS_SEQ الحالية:
'C#
OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");


OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "ADD_LOCATION";
cmd.CommandType = CommandType.StoredProcedure;



cmd.Parameters.Add("p_location_id", OracleType.Number).Direction =
				ParameterDirection.Output;
cmd.Parameters.Add("p_street_address", OracleType.VarChar).Value =
				"123 Any Street";
cmd.Parameters.Add("p_postal_code", OracleType.VarChar).Value = "33040";
cmd.Parameters.Add("p_city", OracleType.VarChar).Value = "Key West";
cmd.Parameters.Add("p_state_province", OracleType.VarChar).Value = "FL";
cmd.Parameters.Add("p_country_id", OracleType.VarChar).Value = "US";

					
OracleString rowId;
conn.Open();
int rowsAffected = cmd.ExecuteOracleNonQuery(out rowId);
conn.Close();


response.write("Rows affected: " + rowsAffected);
response.write("Location ID: " +cmd.Parameters["p_location_id"].Value);

'VB.NET
Dim conn As OracleConnection = New OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;") 
Dim cmd As OracleCommand = New OracleCommand 
cmd.Connection = conn 
cmd.CommandText = "ADD_LOCATION" 
cmd.CommandType = CommandType.StoredProcedure 
cmd.Parameters.Add("p_location_id", OracleType.Number).Direction = ParameterDirection.Output 
cmd.Parameters.Add("p_street_address", OracleType.VarChar).Value = "123 Any Street" 
cmd.Parameters.Add("p_postal_code", OracleType.VarChar).Value = "33040" 
cmd.Parameters.Add("p_city", OracleType.VarChar).Value = "Key West" 
cmd.Parameters.Add("p_state_province", OracleType.VarChar).Value = "FL" 
cmd.Parameters.Add("p_country_id", OracleType.VarChar).Value = "US" 
Dim rowId As OracleString 
conn.Open 
Dim rowsAffected As Integer = cmd.ExecuteOracleNonQuery(rowId) 
conn.Close 
response.write("Rows affected: " + rowsAffected) 
response.write("Location ID: " + cmd.Parameters("p_location_id").Value)


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة

    

عدد المتصفحين لهذا المنتدى «1»: (الضيوف «1» - المتخفون «0»)
الأعضاء «0»: .

عدد الصفحات : 2  1  2   > » موضوع مغلق إضافة موضوع جديد



 
الوقت الأن:اليوم,03:12 مساءً بتوقيت القدس المحتلة

Powered By arabmoheet v3.1

منتديات المحيط العربي  -  راسلنا  -   أعلى
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)