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

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

صورة
- - - - -

الى خبراء Pl


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

#1 mostfa_future

mostfa_future

    عضو مميز

  • الأعضــاء
  • 570 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 19 December 2009 - 02:08 AM

السلام على من اتبع الهدى

اولا عايز اعرف نقطه مهمه
لو عايز اعمل 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 يدوى

وجزاكم الله خير

لا تحسبن المجد تمرا أنت اكله *** لن تبلغ المجد حتى تلعق الصبر


صورةصورة


#2 rachid_to_dba

rachid_to_dba

    مشترك

  • الأعضــاء
  • 136 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 20 December 2009 - 03:44 PM

اخي mostfa_future


يمكن الخطا هون

stmt varchar2(200) := 'ALTER '|| ss

اظن انو من شان space

stmt varchar2(200) := 'ALTER' || ' ' ss || ' ' || name ||' '|| 'COMPILE' ; .... just

جرب وقلي بس في شي ss يمكن تكون null في هالحالة راح نعمل ALTER ع شو؟


ادرس هالحالة كمان

سلام

تم التعديل بواسطة rachid_to_dba, 20 December 2009 - 03:48 PM.


ان شاء الله ... باذن الله ... اكيد سنصل... يارب


#3 mostfa_future

mostfa_future

    عضو مميز

  • الأعضــاء
  • 570 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 20 December 2009 - 05:08 PM

space مش مشكله وبعدين الفنكشن GET_TYPE موجوده يعنى ss هترجع بقيمه اما خطاء null انا هندلو لما يشتغل
شكرا يا اخى على اهتمامك
ارجو رد احد المشارفين

لا تحسبن المجد تمرا أنت اكله *** لن تبلغ المجد حتى تلعق الصبر


صورةصورة


#4 rachid_to_dba

rachid_to_dba

    مشترك

  • الأعضــاء
  • 136 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 20 December 2009 - 06:14 PM

اخي mostfa_future

انا باصد انو ال الفنكشن GET_TYPE يمكن ترجع ss= null

شايف كيف


ان شاء الله ... باذن الله ... اكيد سنصل... يارب


#5 mostfa_future

mostfa_future

    عضو مميز

  • الأعضــاء
  • 570 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 21 December 2009 - 02:38 AM

اخي 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 هى طلع ايرور
ارجو الاهتمام من المشرفين بموضعى

لا تحسبن المجد تمرا أنت اكله *** لن تبلغ المجد حتى تلعق الصبر


صورةصورة


#6 mostfa_future

mostfa_future

    عضو مميز

  • الأعضــاء
  • 570 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 22 December 2009 - 12:14 AM

لسه محدش وصل الى حاجه

لا تحسبن المجد تمرا أنت اكله *** لن تبلغ المجد حتى تلعق الصبر


صورةصورة


#7 mostfa_future

mostfa_future

    عضو مميز

  • الأعضــاء
  • 570 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 31 December 2009 - 04:46 AM

بعد بحث طويل وصلت الى المشكله بالجهود الذاتيه
الكزد الصحيح عشان لو حد عدى على الموضع ومكنش عارف المشكله فين
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

لا تحسبن المجد تمرا أنت اكله *** لن تبلغ المجد حتى تلعق الصبر


صورةصورة