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

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

صورة
- - - - -

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


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

#1 محمد جمعه

محمد جمعه

    مشترك

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

تاريخ المشاركة 26 January 2010 - 12:52 PM

السلام عليكم ورحمة الله وبركاته
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

ولا أعرف لماذا
نرجو الإفادة جزاكم الله كل خير
mmgpgco@hotmail.com

تم التعديل بواسطة محمد جمعه, 26 January 2010 - 01:10 PM.


#2 elmousa68

elmousa68

    عضو

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

تاريخ المشاركة 26 January 2010 - 01:58 PM

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

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

ولا أعرف لماذا
نرجو الإفادة جزاكم الله كل خير
mmgpgco@hotmail.com

الرجاء نشر structure ل table1.

يمكن محاولة إزالة single quotation كالتالي:

v_sql1 := 'insert into table1(name, col1) values ( rec.table_name , v_count(';
"وإذ قلنا للملائكة اسجدوا لآدم فسجدوا إلا إبليس كان من الجن ففسق عن أمر ربه أفتتخذونه وذريته أولياء من دوني وهم لكم عدو بئس للظالمين بدلا" الكهف

#3 محمد جمعه

محمد جمعه

    مشترك

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

تاريخ المشاركة 26 January 2010 - 02:56 PM

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

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


mmgpgco@hotmail.com

#4 أحمد جادو

أحمد جادو

    عضو نشط

  • الأعضــاء
  • 244 مشاركة
  • الاسم الأول:أحمد
  • اسم العائلة:جادو
  • البـلـد: Country Flag
  • المنصب الحالي:Senior Oracle Developer @ Alhasa Municipality

تاريخ المشاركة 26 January 2010 - 03:01 PM

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


- أحمد جادو -
Senior Oracle Developer
Alhasa
Municipality

Alhasa - Saudi Arabia


#5 محمد جمعه

محمد جمعه

    مشترك

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

تاريخ المشاركة 26 January 2010 - 03:39 PM

بسم الله الرحمن الرحيم
اشكر الأخوة الزملاء على الردود
لما اعمل داش داش في السطر 16 والسطر 17
الفانكشن تشتغل صح وترجع عدد جميع السجلات لجميع الجداول
التي تبتدي بـ AA أو AB
ولكن أنا لما اشيل الداش داش من السطر 16 والسطر 17 والسطر 21 commit
تطلع خطأ ومش عارف اعمل ايه
mmgpgco@hotmail.com

تم التعديل بواسطة محمد جمعه, 26 January 2010 - 03:41 PM.


#6 محمد جمعه

محمد جمعه

    مشترك

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

تاريخ المشاركة 30 January 2010 - 03:47 PM

السلام عليكم ورحمة الله وبركاته
الدرجة ده الموضوع صعب
فين الأخوة الخبراء والمستشارين
شكراً
mmgpgco@hotmail.com