محمد جمعه بتاريخ: 26 يناير 2010 تقديم بلاغ مشاركة بتاريخ: 26 يناير 2010 (معدل) السلام عليكم ورحمة الله وبركاته CREATE OR REPLACE FUNCTION count_before RETURN NUMBER IS CURSOR c1 IS SELECT table_name FROM user_tables where table_name like 'AA%' or table_name like 'AB%' order by table_name; v_sql LONG ; v_sql1 LONG ; v_count NUMBER := 0 ; v_count_all NUMBER := 0 ; BEGIN FOR rec IN c1 LOOP v_sql := 'SELECT COUNT(*) FROM ' || rec.table_name; EXECUTE IMMEDIATE v_sql INTO v_count; v_sql1 := 'insert into table1(name, col1) values ( '||rec.table_name||' , '||v_count||' )'; EXECUTE IMMEDIATE v_sql1; dbms_output.PUT_LINE(rec.table_name ||' :- '|| v_count); v_count_all := v_count_all + v_count; END LOOP; --commit; RETURN v_count_all; END; هذه الفانكشن تحسب كل السجلات في كل الجداول وهي تعمل صحيحالتعديل المطلوب تنفيذه أن يتم ادخالInsertفي جدول( السطر رقم 16 ورقم 17 ) table1 بقيم أسم جدول وعدد السجلات في هذا الجدولوعند التنفيذ يعطي خطأ SQL> select count_before from dual; select count_before from dual * ERROR at line 1: ORA-00984: column not allowed here ORA-06512: at "MISR.COUNT_BEFORE", line 17 ولا أعرف لماذانرجو الإفادة جزاكم الله كل خير[email protected] تم تعديل 26 يناير 2010 بواسطة محمد جمعه اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
elmousa68 بتاريخ: 26 يناير 2010 تقديم بلاغ مشاركة بتاريخ: 26 يناير 2010 السلام عليكم ورحمة الله وبركاتهCREATE OR REPLACE FUNCTION count_before RETURN NUMBER IS CURSOR c1 IS SELECT table_name FROM user_tables where table_name like 'AA%' or table_name like 'AB%' order by table_name; v_sql LONG ; v_sql1 LONG ; v_count NUMBER := 0 ; v_count_all NUMBER := 0 ; BEGIN FOR rec IN c1 LOOP v_sql := 'SELECT COUNT(*) FROM ' || rec.table_name; EXECUTE IMMEDIATE v_sql INTO v_count; v_sql1 := 'insert into table1(name, col1) values ( '||rec.table_name||' , '||v_count||' )'; EXECUTE IMMEDIATE v_sql1; dbms_output.PUT_LINE(rec.table_name ||' :- '|| v_count); v_count_all := v_count_all + v_count; END LOOP; --commit; RETURN v_count_all; END; هذه الفانكشن تحسب كل السجلات في كل الجداول وهي تعمل صحيحالتعديل المطلوب تنفيذه أن يتم ادخالInsertفي جدول( السطر رقم 16 ورقم 17 ) table1 بقيم أسم جدول وعدد السجلات في هذا الجدولوعند التنفيذ يعطي خطأ SQL> select count_before from dual; select count_before from dual * ERROR at line 1: ORA-00984: column not allowed here ORA-06512: at "MISR.COUNT_BEFORE", line 17 ولا أعرف لماذانرجو الإفادة جزاكم الله كل خير[email protected] الرجاء نشر structure ل table1.يمكن محاولة إزالة single quotation كالتالي:v_sql1 := 'insert into table1(name, col1) values ( rec.table_name , v_count('; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
محمد جمعه بتاريخ: 26 يناير 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 26 يناير 2010 السلام عليكم ورحمة الله وبركاته SQL> desc table1 Name Null? Type ------------------------------- -------- ---- NAME VARCHAR2(30) COL1 NUMBER(5) COL2 NUMBER(5) [email protected] اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
أحمد جادو بتاريخ: 26 يناير 2010 تقديم بلاغ مشاركة بتاريخ: 26 يناير 2010 لا يجب أن تكون جملة الاستعلام من جدول dual ولكن يجب أن تكون من جدولك أنت table1ثانياً أنا ألاحظ أنك لم تعمل commit داخل الـprocedure فلم يحدث أمر insert فعلياً اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
محمد جمعه بتاريخ: 26 يناير 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 26 يناير 2010 (معدل) بسم الله الرحمن الرحيماشكر الأخوة الزملاء على الردودلما اعمل داش داش في السطر 16 والسطر 17الفانكشن تشتغل صح وترجع عدد جميع السجلات لجميع الجداولالتي تبتدي بـ AA أو ABولكن أنا لما اشيل الداش داش من السطر 16 والسطر 17 والسطر 21 commitتطلع خطأ ومش عارف اعمل ايه[email protected] تم تعديل 26 يناير 2010 بواسطة محمد جمعه اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
محمد جمعه بتاريخ: 30 يناير 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 30 يناير 2010 السلام عليكم ورحمة الله وبركاتهالدرجة ده الموضوع صعبفين الأخوة الخبراء والمستشارينشكراً[email protected] اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.