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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

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


9 رد (ردود) على هذا الموضوع

#1 qaassim

qaassim

    عضو

  • الأعضــاء
  • 5 مشاركة

تاريخ المشاركة 21 December 2009 - 02:47 AM

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

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

عندي جدولين :

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

ملف مرفق  1.jpg   5.86كيلو   28 عدد مرات التحميل


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




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

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

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


تحيــاتي ,,

#2 asd202

asd202

    عضو نشط

  • الأعضــاء
  • 405 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 21 December 2009 - 10:20 AM

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

begin

for i in REVERSE 1..100000

loop

message('اللهم ارحمنا');

end loop;

end;

#3 qaassim

qaassim

    عضو

  • الأعضــاء
  • 5 مشاركة

تاريخ المشاركة 21 December 2009 - 01:03 PM

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

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

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

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

#4 asd202

asd202

    عضو نشط

  • الأعضــاء
  • 405 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 21 December 2009 - 03:34 PM

اولا سكربت الجداول 
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, 21 December 2009 - 03:35 PM.

begin

for i in REVERSE 1..100000

loop

message('اللهم ارحمنا');

end loop;

end;

#5 qaassim

qaassim

    عضو

  • الأعضــاء
  • 5 مشاركة

تاريخ المشاركة 22 December 2009 - 10:26 AM

شكرا ً 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, 22 December 2009 - 11:15 AM.


#6 qaassim

qaassim

    عضو

  • الأعضــاء
  • 5 مشاركة

تاريخ المشاركة 22 December 2009 - 11:23 AM

أو هذا الخطأ

ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'TABLES_CREATOR' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


#7 asd202

asd202

    عضو نشط

  • الأعضــاء
  • 405 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 22 December 2009 - 01:32 PM

طيب اتاكد انها اتكريتت فى نفس الاسكيما
begin

for i in REVERSE 1..100000

loop

message('اللهم ارحمنا');

end loop;

end;

#8 qaassim

qaassim

    عضو

  • الأعضــاء
  • 5 مشاركة

تاريخ المشاركة 22 December 2009 - 02:56 PM

اخي العزيز 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, 22 December 2009 - 03:38 PM.


#9 asd202

asd202

    عضو نشط

  • الأعضــاء
  • 405 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 22 December 2009 - 04:37 PM

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

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

for i in REVERSE 1..100000

loop

message('اللهم ارحمنا');

end loop;

end;

#10 asd202

asd202

    عضو نشط

  • الأعضــاء
  • 405 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 22 December 2009 - 04:40 PM

تابع هذا القسم
http://www.araboug.o...hp?showforum=71
begin

for i in REVERSE 1..100000

loop

message('اللهم ارحمنا');

end loop;

end;