mostfa_future بتاريخ: 18 ديسمبر 2009 تقديم بلاغ مشاركة بتاريخ: 18 ديسمبر 2009 السلام على من اتبع الهدى اولا عايز اعرف نقطه مهمهلو عايز اعمل COMPILE لل PACKAGE اعملو لل specification وهو هيتعمل اتوتيكا body ولا العكس ارجو التوضيح و عايز اعرف ايه مشكله هذا PACKAGE CREATE OR REPLACE PACKAGE COMPILE_PKG IS PROCEDURE MAKE (name VARCHAR2 ); end ; / show errors CREATE OR REPLACE PACKAGE body COMPILE_PKG IS SS VARCHAR2(20); function GET_TYPE (PRO VARCHAR2)RETURN VARCHAR2 IS BEGIN SELECT DISTINCT type INTO SS FROM user_source WHERE name = PRO ; RETURN SS; EXCEPTION WHEN NO_DATA_FOUND THEN SS:= NULL; RETURN SS; WHEN TOO_MANY_ROWS THEN SS:= 'PACKAGE' ; RETURN SS; END GET_TYPE ; PROCEDURE MAKE (name VARCHAR2 ) IS stmt varchar2(200) := 'ALTER '|| ss || ' '|| name || ' COMPILE'; BEGIN EXECUTE IMMEDIATE stmt; END MAKE ; end ; بيطلع ايرور فى الانفوك BEGIN COMPILE_PKG.MAKE('GET_TYPE') ; end ; BEGIN * ERROR at line 1: ORA-00940: invalid ALTER command ORA-06512: at "HR.COMPILE_PKG", line 22 ORA-06512: at line 2 علما انى جر بت COMPILE لل GET_TYPE واشتغل بطريقه العاديهوجربت function GET_TYPE لوحدها وعملت RETURN مظبوطوجربت PROCEDURE MAKE مع وضع type يدوى وجزاكم الله خير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
rachid_to_dba بتاريخ: 20 ديسمبر 2009 تقديم بلاغ مشاركة بتاريخ: 20 ديسمبر 2009 (معدل) اخي mostfa_future يمكن الخطا هون stmt varchar2(200) := 'ALTER '|| ss اظن انو من شان spacestmt varchar2(200) := 'ALTER' || ' ' ss || ' ' || name ||' '|| 'COMPILE' ; .... just جرب وقلي بس في شي ss يمكن تكون null في هالحالة راح نعمل ALTER ع شو؟ادرس هالحالة كمانسلام تم تعديل 20 ديسمبر 2009 بواسطة rachid_to_dba اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mostfa_future بتاريخ: 20 ديسمبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 20 ديسمبر 2009 space مش مشكله وبعدين الفنكشن GET_TYPE موجوده يعنى ss هترجع بقيمه اما خطاء null انا هندلو لما يشتغل شكرا يا اخى على اهتمامك ارجو رد احد المشارفين اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
rachid_to_dba بتاريخ: 20 ديسمبر 2009 تقديم بلاغ مشاركة بتاريخ: 20 ديسمبر 2009 اخي mostfa_futureانا باصد انو ال الفنكشن GET_TYPE يمكن ترجع ss= null شايف كيف اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mostfa_future بتاريخ: 20 ديسمبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 20 ديسمبر 2009 اخي mostfa_futureانا باصد انو ال الفنكشن GET_TYPE يمكن ترجع ss= null شايف كيف اخى الكريم المشكله مش فى دى انا عرفت المشكله بس مش قادر احلها المشكله فى عمليه تمرير القيم مابين البروستشير الى الفتكشن الثانويه تساوى قيمه name الى فى بوستشر name بى proالى فنكشن وانا عدلت الكود وبردك مش شتغلش بعيد عن الهندل الكود الجديدCREATE OR REPLACE PACKAGE COMPILE_PKG IS PROCEDURE MAKE (name VARCHAR2 ); end ; / show errors CREATE OR REPLACE PACKAGE body COMPILE_PKG IS SS VARCHAR2(20); yy VARCHAR2(20); PROCEDURE MAKE (name VARCHAR2 ) IS stmt varchar2(200); function GET_TYPE RETURN VARCHAR2 IS SS VARCHAR2(20); CURSOR mm iS SELECT DISTINCT type FROM user_source WHERE name = name ; BEGIN OPEN mm ; IF MM %NOTFOUND THEN DBMS_OUTPUT.PUT_LINE('SORRY NO SALARY REVISIONS FOR EMPLOYEES IN THIS DEPARTMENT'); ELSE LOOP FETCH MM INTO SS; EXIT WHEN MM%NOTFOUND; END LOOP ; END IF; RETURN SS; yy :=ss; END GET_TYPE; BEGIN stmt:= 'ALTER '|| yy || ' '|| name || ' COMPILE'; DBMS_OUTPUT.PUT_LINE(stmt ); END MAKE ; end ; / show errors BEGIN COMPILE_PKG.MAKE ('EMP_PKG'); END; ااناتج بيقى الجمله ALTER EMP_PKG COMPILE PL/SQL procedure successfully completed. يعنى بدون ال typy يعنى بدون yy او ss عشان كده لو عملتو دينماك EXECUTE IMMEDIATEin هى طلع ايرور ارجو الاهتمام من المشرفين بموضعى اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mostfa_future بتاريخ: 21 ديسمبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 21 ديسمبر 2009 لسه محدش وصل الى حاجه اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mostfa_future بتاريخ: 31 ديسمبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 31 ديسمبر 2009 بعد بحث طويل وصلت الى المشكله بالجهود الذاتيهالكزد الصحيح عشان لو حد عدى على الموضع ومكنش عارف المشكله فين CREATE OR REPLACE PACKAGE COMPILE_PKG IS PROCEDURE MAKE (name VARCHAR2 ); end ; / show errors CREATE OR REPLACE PACKAGE body COMPILE_PKG IS XX Boolean ; function GET_TYPE (v_name VARCHAR2) RETURN VARCHAR2 IS SS VARCHAR2(20); BEGIN XX :=True ; SELECT DISTINCT type into ss FROM user_source WHERE name = v_name ; RETURN SS; EXCEPTION WHEN NO_DATA_FOUND THEN xx:=false; SS:= 'mostfa' ; RETURN SS; WHEN TOO_MANY_ROWS THEN SS:= 'PACKAGE' ; RETURN SS; END GET_TYPE; PROCEDURE MAKE (name VARCHAR2 ) IS stmt varchar2(200); yy VARCHAR2(20); BEGIN yy :=GET_TYPE(name); if xx then stmt:= 'ALTER '|| yy || ' '|| name || ' COMPILE'; EXECUTE IMMEDIATE stmt; else DBMS_OUTPUT.PUT_LINE(' خطاء فى اسم الاداء' ); end if; END MAKE ; end ; / show errors اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.