الانتقال إلى المحتوى

إنشاء جداول ديناميكية


qaassim

Recommended Posts

السلام عليكم ,,

ربما يكون شرحي للموضوع مبهم قليلا ً لذا ركزوا قليلا ً معي ..

عندي جدولين :

TAB_MASTER مخصص لأسماء الجداول

Create Table Tab_master (
SN number,
Tname varchar2(30) not null,
constraint tab_SN_PK primary key (SN),
constraint tab_Tname_U UNIQUE (Tname)
);



Col_master مخصص لأسماء الأعمدة

Create table Col_master (
ROW_ID number nut null,
DN number not null,
cname varchar2(30) defult value 'varchar2',
constraint col_DN_FK foreign key (DN) refrences tab_master(SN);



إذا ما أفترضنا أن البيانات كما الآتي بالجداول

TAB_MASTER

SN		  TNAME
1		  'Employees'



COL_MASTER

post-84389-1261352527_thumb.jpg


إستنادا ً على الحقول الموجوده في الجدولين سيتكون بناء جدول جديد
Employees:
EMP_NAME varchar2 emp_id number




إلى الآن لم أتوصل لحل هذا اللغز :)

أرجو منكم المساعدة

الشكر موصول مقدما ً


تحيــاتي ,,

رابط هذا التعليق
شارك

انت تعمل 2 كيرسور
وتعمل متغير statment varchar2(32000)
وتفتح الكرسور الاول وتحط create table ...
ثم تفتح التانى وتحط الكولمز وطبعا تحط المسافات وخلافة
وبعد متكون statment
وتقفل الكرسورز تعمل
execute immediate 
لجملة statment
اللى هى حتكون الجداول

رابط هذا التعليق
شارك

شكرا ً اخي العزيز asd202 على الرد السريع

هل ممكن تطبيق عملي على المثال المطروح في الموضوع ؟

في الحقيقة انا OCA DBA وليس لدي ذلك الإلمام بال PLSQL

شكرا ً جزيلا ً مقدما ً

رابط هذا التعليق
شارك

اولا سكربت الجداول 
Create Table Tab_master (
SN number,
Tname varchar2(30) not null,
constraint tab_SN_PK primary key (SN),
constraint tab_Tname_U UNIQUE (Tname)
); 



Create table Col_master (
ROW_ID number not null,
DN number not null,
cname varchar2(30) ,
ctype varchar2(30) default  'varchar2',
constraint col_DN_FK foreign key (DN) references tab_master(SN)
); 



CREATE OR REPLACE procedure tables_creator
is
cursor tab is select * from Tab_master where exists(select 1 from Col_master where sn=dn);
cursor col(p_sn number) is select * from Col_master where dn=p_sn;
create_statment varchar2(32000);
begin for cur1 in tab loop
create_statment:='create table '||cur1.tname||'(';
for cur2 in col(cur1.sn) loop
create_statment:=create_statment||cur2.cname||' '||cur2.ctype||' ,';
end loop;
create_statment:=trim(',' from create_statment); create_statment:=create_statment||') ';
execute immediate (create_statment);
commit;
create_statment:=null;
end loop;
end;

تمت تجربتها بنجاح فقط املا بالجدال المراد انشائها والعواميد ثم استدعى البروسيدر

تم تعديل بواسطة asd202
رابط هذا التعليق
شارك

شكرا ً ASD202
جعله الله في ميزان حسناتك ..

أعلم انني أطلت كثيرا ً ولكن تحملني قليلا ً :)

عند إستدعاء ال PROSEDURE يظهر لي الآتي

BEGIN tables_creator; END; 
* 
ERROR at line 1: 
ORA-00906: missing left parenthesis 
ORA-06512: at "HR.TABLES_CREATOR", line 11 
ORA-06512: at line 1

تم تعديل بواسطة qaassim
رابط هذا التعليق
شارك

اخي العزيز ASD202 تم حل المشكله ..

المشكله كانت في البيانات المجوده في جدول COL_MASTER وتحديدا ً في Column type فلم اقم بإدخال ال Data type الصحيح ,

إضافه :

ماذا لو أردت أن أضيف خاصية Primary Key للجدول المراد إنشائه ؟
و forign Key أيضا ؟

عمود إضافي لل PK و لل FK في جدول ال COL_MASTER او ماذا تقترح أن أضيف للجداول لإحتواء هذه الخاصية الجديدة ؟

Create table Col_master (
ROW_ID number not null,
DN number not null,
cname varchar2(30) ,
ctype varchar2(30) default 'varchar2',

PK varchar2(20),
FK varchar2(20),

constraint col_DN_FK foreign key (DN) references tab_master(SN)
);



كيف سيكون ال PROSEDURE ?

أريد أن أتعلم ال PLSQL بسرعه بأي المواد تنصحني ؟ أفضل المواد باللغه الإنجليزية

شكرا ً جزيلا ً
تحيــاتي

تم تعديل بواسطة qaassim
رابط هذا التعليق
شارك

لن تحاتاج اى كولمز جديدة او تعديل بالروسيدر
فقط ضيف
الكونسترين بعد نوع العمود هكذا
number,primary key(col1)

اما الماتريلز توجد مواد كثيرة بالمنتدى وضعها كثير من الزملاء الافاضل

رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

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

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