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

الى خبراء Pl


mostfa_future

Recommended Posts

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


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

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

رابط هذا التعليق
شارك

اخي mostfa_future


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

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

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

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

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


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

سلام

تم تعديل بواسطة rachid_to_dba
رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

  • بعد 2 أسابيع...

بعد بحث طويل وصلت الى المشكله بالجهود الذاتيه
الكزد الصحيح عشان لو حد عدى على الموضع ومكنش عارف المشكله فين

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

رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

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

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