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

لمن يرغب فى التعامل مع ال dynamic sql

Featured Replies

بتاريخ:

( المكنه طلعت قماش)

فى البدايه احب ان اوجه الشكر للاخ الحبيب oracle_itself لانه هو اعطنى هذه الاكود وطلب منى ان اضعها على المنتدى من اجل فأئدة الجميع .

 

فى البدايه ما الفأئده من ال dynamic sql ؟؟

 

عندما يكون لديك مشروع به عدد 50 جدول جميع الجداول لها نفس الهيكل ( الرقم,الاسم,التاريخ) التفكير العادى يفكر فى عمل 50 شاشه لكل جدول. ووحد تانى يقول اعمل tab canvas اما الافضل هو عمل اللى ميتعملش بجمل ال sql العاديه يعنى يعمل شاشة واحده و بها list بها اسما الجداول وبكده بأستخدام ال dynamic sql اصبح اسم الجدول متغير

 

مثال للتوضيح

 

اذا كنت تعمل فى مشروع " نادى رياضى" وطلب منك ان تعمل جداول للالعاب وهيكل جميع اللعب ثابت (رقم,اسم_الاعب,تاريخ(تاريخ حضوره فى التمرين)) فالحل هو استخدام ال dynamic sql .

الكود مع شرح بسيط

المرحله الاولى (sql*plus)

1- انشاء جدول

create table Customer(
Cust_id number,
cust_name varchar2(50))

2- يتم عمل package (لانه سيتم استخدام اكثر من اجراءوبما ان كلهم مرتبطين ببعض يتم عمل package )

اولآ ال head

create or replace package pack1 is 
  type cust_rec is record 
  (cust_id customer.cust_id%type,cust_name customer.cust_name%type);
 type cust_cur is ref cursor return cust_rec;
 type cust_table is table of cust_rec index by binary_integer;
 procedure cust_data(cust_main in out cust_table);
 procedure cust_insert(r in cust_rec,p in customer.cust_name%type);
end pack1;

 

ثأنيآ ال body

create or replace package body pack1 is
 procedure cust_data(cust_main in out cust_table) is
   co number;
   cursor fetch_data is
     select cust_id,cust_name from customer;
begin
 co :=1;
 open fetch_data;
 loop
   fetch fetch_data into cust_main(co).cust_id,cust_main(co).cust_name;
   exit when fetch_data%notfound;
   co :=co+1;
 end loop;
 end cust_data;
procedure cust_insert(r in cust_rec,p in customer.cust_name%type) is
   table_name varchar2(100);
 begin
   table_name := 'insert into ' || p || ' values (:1,:2)';
   execute immediate table_name using r.cust_id,r.cust_name;
 end cust_insert;
end pack1;

المرحله الثانيه (forms)

بعد فتح ال form نقوم بعمل data block

next

stroed procedure

نكتب فى ال procedure

pack1.cust_data

ثم نقم بنقل من اليسار الى اليمين

next

ثم نكتب

pack1.cust_data

وبعدها نقوم بعمل next الى ان تظهر finish

ونكمل كما لو كان table عادى

خلاصنا ال data block

 

when-new-form-instance

declare
cursor fetch_table is
select tname from tab where user='scott';
n number;
begin
n :=1;
for abc in fetch_table loop
 add_list_element('list6',n,abc.tname,abc.tname);
 n := n+1;
end loop;
end;

نخش على كود الادخال فى زر

when-button-pressed

--فى هذا الكود يت تمرير القيم و اسم الجدول من خلال ال package

declare 
 r pack1.cust_rec;
 p varchar2(100);
begin
p :=:list6;  -- name of list item
 r.cust_id :=:cust_id;  
 r.cust_name :=:cust_name;
 pack1.cust_insert(r,p);
 commit_form;
 clear_form;
end;

لاتنسو تخلوا ال list

database item =no

 

اتمنى ان تكون الفكره واضحه وربنا مع الجميع

للتأكيد هذا الكود من تنفيذ الاخ العزيز oracle_itself

 

ايهاب وجدى

تم تعديل بواسطة hobaa

بتاريخ:

أحب أشكر الأخ أيهاب وأخص بالشكر عن هذا الموضوع
أستاذى oracle itself
وقوله الى الأمام وربنا يخليك ونتعلم منك



تلميذك

mah_dba

بتاريخ:

اخى العزيز ايهاب وجدى ..
بعد التحية ..
اولا لا شكر على واجب لأننا اخوة قبل اى شىء ..
و كنت عايز اقول ان المثال دا يصلح عندما يكون لديك مجموعة من الجداول لها هيكل واحد مثل المحافظات ( رقم المحافظة - اسم المحافظة - الحالة ) .. المنطقة ( رقم المنطقة - اسم المنطقة - الحالة و هكذا ) ...............
ثانيا ... هو اننا لازم نفكر بشكل متطور اكتر ... الكود دا بكل الى فية بيعمل ادخال بيانات بس.. الخطوة الجاية و الى انا عايز كل واحد فى هذا المنتدى يساهم فية .. هو تطوير الكود ليستوعب عملية البحث فى نفس الجداول و التعديل و الحذف و هذا ما اريدة بالفعل ...

اتمنى لكم مزيد التوفيق

Oracle ITself

تم تعديل بواسطة oracle_itself

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

1+1 =2 ده العادى
فى البرمجه
1+1 =3 ده المتطورررررررررررررررررررررررررررر
اتمنى ان يشارك الجميع فى بنا فكر الاخر

ايهاب وجدى

بتاريخ:

موضوع قوي جدا وجاري التجربه

بتاريخ:

ارجوا ان يكون كل من قرأ الموضوع يكون وصلتة المعلومة و شكرا

بتاريخ:

مشكورا على هذة المعلومات

بتاريخ:

السلام عليكم

شكرا على طرح الفكره
وجاري المحاوله

بتاريخ:

شكرا جزيلا

بتاريخ:

جزاك الله خيرا أخي الكريم و جعله الله في ميزان حسناتك

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

باشا ربنا يكرمك وجزاك الله خير

والى الأمام دائما

والله المستعاااان والموفق

smart angel
oracle devloper

بتاريخ:

[عندما يكون لديك مشروع به عدد 50 جدول جميع الجداول لها نفس الهيكل ( الرقم,الاسم,التاريخ) التفكير العادى والتحليلي الصحيح أن لا يكون لديك هذه الكمية من الجداول وهي ذات نفس البنية لأن هذا يضر بأداء قاعدة المعطيات إنما الصحيح هو أن نضيف حقل واحد على الجدول يعبر عن نوع اللعبة مثلا في مثال الرياضة الذي أعطيته هذا الحقل يغنيك عن 49 جدول لست بحاجة لهم .
أما عن Dynamic SQL ففوائدها الحقيقية ليست في هذا المجال يا صديقي .
فقط للتوضيح وأرجو من جميع المبرمجين العاملين مع قواعد المعطيات قراءة متعمقة في Analysis وال Normalization لما فيه فائدة لهم والإقلال من إهدار الوقت .
ودمتم.
عابر سبيل.

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

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

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

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

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

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.