الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

استعمال أوامر Dml مع Procedure

Featured Replies

بتاريخ:

السلام عليكم ورحمة الله وبركاته

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]

تم تعديل بواسطة محمد جمعه

بتاريخ:
السلام عليكم ورحمة الله وبركاته
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(';
بتاريخ:
  • كاتب الموضوع

السلام عليكم ورحمة الله وبركاته

SQL> desc table1
Name                            Null?    Type
------------------------------- -------- ----
NAME                                     VARCHAR2(30)
COL1                                     NUMBER(5)
COL2                                     NUMBER(5)



[email protected]

بتاريخ:

لا يجب أن تكون جملة الاستعلام من جدول dual ولكن يجب أن تكون من جدولك أنت table1
ثانياً أنا ألاحظ أنك لم تعمل commit داخل الـprocedure فلم يحدث أمر insert فعلياً

بتاريخ:
  • كاتب الموضوع

بسم الله الرحمن الرحيم
اشكر الأخوة الزملاء على الردود
لما اعمل داش داش في السطر 16 والسطر 17
الفانكشن تشتغل صح وترجع عدد جميع السجلات لجميع الجداول
التي تبتدي بـ AA أو AB
ولكن أنا لما اشيل الداش داش من السطر 16 والسطر 17 والسطر 21 commit
تطلع خطأ ومش عارف اعمل ايه
[email protected]

تم تعديل بواسطة محمد جمعه

بتاريخ:
  • كاتب الموضوع

السلام عليكم ورحمة الله وبركاته
الدرجة ده الموضوع صعب
فين الأخوة الخبراء والمستشارين
شكراً
[email protected]

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.