بتاريخ: 26 يناير 201016 سنة comment_183358 السلام عليكم ورحمة الله وبركاته 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 يناير 201016 سنة بواسطة محمد جمعه تقديم بلاغ
بتاريخ: 26 يناير 201016 سنة comment_183364 السلام عليكم ورحمة الله وبركاته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 يناير 201016 سنة كاتب الموضوع comment_183375 السلام عليكم ورحمة الله وبركاته SQL> desc table1 Name Null? Type ------------------------------- -------- ---- NAME VARCHAR2(30) COL1 NUMBER(5) COL2 NUMBER(5) [email protected] تقديم بلاغ
بتاريخ: 26 يناير 201016 سنة comment_183376 لا يجب أن تكون جملة الاستعلام من جدول dual ولكن يجب أن تكون من جدولك أنت table1ثانياً أنا ألاحظ أنك لم تعمل commit داخل الـprocedure فلم يحدث أمر insert فعلياً تقديم بلاغ
بتاريخ: 26 يناير 201016 سنة كاتب الموضوع comment_183382 بسم الله الرحمن الرحيماشكر الأخوة الزملاء على الردودلما اعمل داش داش في السطر 16 والسطر 17الفانكشن تشتغل صح وترجع عدد جميع السجلات لجميع الجداولالتي تبتدي بـ AA أو ABولكن أنا لما اشيل الداش داش من السطر 16 والسطر 17 والسطر 21 commitتطلع خطأ ومش عارف اعمل ايه[email protected] تم تعديل 26 يناير 201016 سنة بواسطة محمد جمعه تقديم بلاغ
بتاريخ: 30 يناير 201016 سنة كاتب الموضوع comment_183690 السلام عليكم ورحمة الله وبركاتهالدرجة ده الموضوع صعبفين الأخوة الخبراء والمستشارينشكراً[email protected] تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.