esam_gm بتاريخ: 8 أغسطس 2009 تقديم بلاغ مشاركة بتاريخ: 8 أغسطس 2009 هل يمكن احضار الجدول اوتوماتيك واستخدامه في select بهذا الشكلselect * from tableحيث ان table هنا متغير اي انه يكون اي شي employees او jobلنخيل مثلا ان هناك cursor يقوم بقراءة كل الجداول في الاسكيمة ففي هذه الحالة اريد كتابة لا اريد كتابة select * from employees بل اريد ان تتم كتابة اسم الجداول اوتوماتيك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
asd202 بتاريخ: 8 أغسطس 2009 تقديم بلاغ مشاركة بتاريخ: 8 أغسطس 2009 حطها جوه execute immediateعلى مستوى db اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
esam_gm بتاريخ: 9 أغسطس 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 9 أغسطس 2009 كيف سيكون شكل جملة select اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
esam_gm بتاريخ: 9 أغسطس 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 9 أغسطس 2009 المشكلة انه لو كتبت اي شي في جملة select غير موجوده في database يعطي error اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
esam_gm بتاريخ: 9 أغسطس 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 9 أغسطس 2009 لكي تتضح الامر اكثر هذا ما اريده CREATE OR REPLACE PROCEDURE HRHR.tb_cl_vl (num_num IN NUMBER)IS n11 VARCHAR2 (500); CURSOR c1 IS SELECT table_name FROM dba_tables WHERE owner = 'HRHR';BEGIN OPEN c1; LOOP FETCH c1 INTO n11; EXIT WHEN c1%NOTFOUND; DECLARE n_11 VARCHAR2 (500); CURSOR c2 IS SELECT column_name FROM dba_tab_cols WHERE table_name LIKE n11 AND column_name = num_num; BEGIN OPEN c2; LOOP FETCH c2 INTO n_11; EXIT WHEN c2%NOTFOUND;---------------------------------------- DECLARE n_33 VARCHAR2 (500); CURSOR c33 IS SELECT COUNT (n_11) FROM n11 WHERE n_11 = num_num; BEGIN OPEN c33; LOOP FETCH c33 INTO n_33; EXIT WHEN c33%NOTFOUND; INSERT INTO esam (no1, no2 ) VALUES (n11, n_11 ); COMMIT; END LOOP; CLOSE c33; END;---------------------------------------- END LOOP; CLOSE c2; END; END LOOP; CLOSE c1;-- COMMIT;END;/[يسار][/يسار]الخطا هنا في جملة select اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
asd202 بتاريخ: 9 أغسطس 2009 تقديم بلاغ مشاركة بتاريخ: 9 أغسطس 2009 جرب هذا فى التودdeclareb number;beginEXECUTE IMMEDIATE'select 123 from '||:dual into b;dbms_output.put_line(;end; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
asd202 بتاريخ: 9 أغسطس 2009 تقديم بلاغ مشاركة بتاريخ: 9 أغسطس 2009 declare b number; begin EXECUTE IMMEDIATE'select 123 from '||:dual into b; dbms_output.put_line(; end; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
abdou1984 بتاريخ: 9 أغسطس 2009 تقديم بلاغ مشاركة بتاريخ: 9 أغسطس 2009 اخى الكريم الحل الذى تريده سهل وبسيط جدا - وهو جملة الاستعلام الاتية SELECT 'SELECT * FROM ' || TABLE_NAME FROM USER_TABLES; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mustafagamiel بتاريخ: 9 أغسطس 2009 تقديم بلاغ مشاركة بتاريخ: 9 أغسطس 2009 السلام عليكم أخي الكريم جرب هذا التعديل على البروسيدور الذي قمت بانشاؤه يمكنك هنا وضعه على اسكيما لايشترط ال sys CREATE OR REPLACE PROCEDURE tb_cl_vl (num_num IN NUMBER) IS n11 VARCHAR2 (500); CURSOR c1 IS SELECT table_name FROM user_tables ; BEGIN OPEN c1; LOOP FETCH c1 INTO n11; EXIT WHEN c1%NOTFOUND; DECLARE n_11 VARCHAR2 (500); CURSOR c2 IS SELECT column_name FROM user_tab_cols WHERE table_name LIKE n11 AND column_name = num_num; BEGIN OPEN c2; LOOP FETCH c2 INTO n_11; EXIT WHEN c2%NOTFOUND; ---------------------------------------- DECLARE n_33 VARCHAR2 (500); CURSOR c33 IS SELECT COUNT (n_11) FROM user_tables where table_name like n11 and n_11 = num_num; BEGIN OPEN c33; LOOP FETCH c33 INTO n_33; EXIT WHEN c33%NOTFOUND; INSERT INTO esam (no1, no2) VALUES (n11, n_11); COMMIT; END LOOP; CLOSE c33; END; ---------------------------------------- END LOOP; CLOSE c2; END; END LOOP; CLOSE c1; -- COMMIT; END; موفق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.