الانتقال إلى المحتوى
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.

الى خبراء Pl

Featured Replies

بتاريخ:

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


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

شايف كيف

بتاريخ:
  • كاتب الموضوع
اخي 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

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

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

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

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

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

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.