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

Wrap

Featured Replies

بتاريخ:

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




صراحتاً أنا أستخدم الأمر Wrap لتشفير أكوادي الخاصة المدرجة بقاعدة البيانات في صورة Procedure, Function, Package, Trigger ، ولكن وجدت أنه لا يقبل عملية التشفير في حالة إنشاء Sub Select كما يلي :





CREATE OR REPLACE FUNCTION GET_EMPLOYEE_NAME(IN_EMPLOYEE_ID NUMBER) RETURN VARCHAR2

AS

ID_NAME VARCHAR2(100);

ID_SEMP_COUNT NUMBER;

BEGIN

SELECT (EMPLOYEE_FNAME || ' ' || EMPLOYEE_MNAME || ' ' || EMPLOYEE_LNAME) AS EMPLOYEE_NAME,

(SELECT COUNT(*) FROM EMPLOYEE E WHERE E.EMPLOYEE_SEMP = EMPLOYEE.EMPLOYEE_ID) AS COUNT_EMPLOYEE

INTO ID_NAME,ID_SEMP_COUNT

FROM EMPLOYEE

WHERE EMPLOYEE_ID = IN_EMPLOYEE_ID;

RETURN ID_NAME;

END;

/



السؤال ، كيف يمكنني أن أشفر هذا الـ Function علي حالتة هذا ؟؟؟ وهل يوجد حل آخر ؟؟؟




شكراً


بتاريخ:

استاذي الكريم
انا لم اعمل على wrap من قبل
ولكن بحثت على موقع اوراكل عن هذا الموضوع ووجدت هذا اللينك أتمنى ان يكون كافيا

http://download.oracle.com/docs/cd/B10501_...6624/c_wrap.htm

بتاريخ:
  • كاتب الموضوع

المشكلة ليست في كيفية إستخدام الـ Wrap ، أنظر :

Wrap IName=D:\Code.sql OName=D:\Code



ولكن المشكلة في عدم قبول Sub Select لإجراء تشفير للـ Function نفسة !!!!

يعني مثلاً :

Select Dep_Code,Dep_Name,(Select Count(*) From Emp Where Emp_DepID = Emp.Emp_ID) As Count_Emp
From Dep




دة غير أنه لا يقبل أي Joins زي مثلاً :

From Dep Inner Join Emp On Dep.Dep_ID = Emp.Emp_DepID



لا يقبلها في عملية التشفير !!!!


لكن لو كان الكود Free خالي من أي جملة Select متشعبة يقبلها علي الفور ، زي مثلاً :

Select Emp_Name
Into ID_Name
From Emp
Where Emp_ID = 1



أو مثلاً بدون أي جملة Select هتكون العملية أفضل كما يلي :

Create Or Replace Function PSex(In_Sex Number) Return VarChar2
As
Begin
 If(In_Sex = 1)Then
Return 'ذكـر';
 ElsIf(In_Sex = 2)Then
Return 'أنثي';
 Else
Return '';
 End If;
End;
/





فياريت أجد مساعدة لحل هذه المشكلة



شكراً

بتاريخ:

تحية طيبة وبعد



CREATE OR REPLACE FUNCTION EMP_COUNT(E_ID NUMBER) RETURN NUMBER 
AS E_COUNT NUMBER;

BEGIN SELECT    COUNT(*) INTO E_COUNT FROM EMPLOYEE WHERE EMPLOYEE_ID = E_ID;

RETURN E_COUNT;

END EMP_COUNT;
/

CREATE OR REPLACE FUNCTION GET_EMPLOYEE_NAME(IN_EMPLOYEE_ID NUMBER) RETURN VARCHAR2
AS ID_NAME VARCHAR2(100);

ID_SEMP_COUNT NUMBER;

BEGIN SELECT (EMPLOYEE_FNAME || ' ' || EMPLOYEE_MNAME || ' ' || EMPLOYEE_LNAME) AS EMPLOYEE_NAME,
EMP_COUNT(IN_EMPLOYEE_ID) AS COUNT_EMPLOYEE

INTO ID_NAME,ID_SEMP_COUNT FROM EMPLOYEE

WHERE EMPLOYEE_ID = IN_EMPLOYEE_ID;

RETURN ID_NAME;

END;

/


بتاريخ:
  • كاتب الموضوع

أمممممممممممممم

طب ولو أنا لدي حوالي 50 Function ، وكل غرض يحتوي علي 20 جملة إستعلام بهذا الشكل ، يعني 50 × 20 = 1000 !!!

بهذا الشكل سيحدث لخبطة كثيرة بين كل Function !!!

يبقي الحل الأفضل هو صناعة Package لكل Function رئيسي !!!

يعني لكل Function حزكة خاصة !!!




طب دة وعرفنا حلة ، ولو أنني كنت أرغب في حل آخر ... طيب السؤال دلوقتي ، ما هو حل الـ Joins ؟؟؟؟؟؟؟؟؟؟؟؟؟؟!!!!!!!!!!



شكراً أخي الكريم علي ردك الكريم

بتاريخ:
  • كاتب الموضوع

؟؟؟؟؟؟؟؟؟؟

بتاريخ:
  • كاتب الموضوع

الأخوة الكرام ، أسلوب الـ Relation صحيح وليس خاطيء ، ولكن الأسلوب القديم هو ما يلي :

Inner Join:

NEW:  FROM DEP INNER JOIN EMP ON DEP.DEP_ID = EMP.EMP_DEPID<BR>OLD:   FROM DEP,EMP  WHERE DEP.DEP_ID = EMP.EMP_DEPID



Left Join:

NEW:  FROM DEP LEFT JOIN EMP ON DEP.DEP_ID = EMP.EMP_DEPID<BR>OLD:   FROM DEP,EMP   WHERE DEP.DEP_ID = EMP.EMP_DEPID (+)



Right Join:

NEW:  FROM DEP RIGHT JOIN EMP ON DEP.DEP_ID = EMP.EMP_DEPID<BR>OLD:   FROM DEP,EMP  WHERE DEP.DEP_ID(+) = EMP.EMP_DEPID




وللأسف الطريقة القديمة هي الصحيحة والمقبولة مع أمر Wrap !!!!

بس المشكلة أنني أستخدمت الكود Join أكثر من مرة ، فياريت لو حد يعلم حل هذه المشكلة ، وإلا سأضطر الي إجراء تعديل علي كل إجرائاتي وأغراضي المدرجة في قاعدة بياناتي ؟؟؟




يا جماعة أنا في أمس الحاجة لحل هذه المشكلة ، فهل هناك حل ؟؟؟ ولو كان ليس هناك أي حلول سوي هذا فياريت إخباري بذلك ؟؟؟



شكراً

بتاريخ:
  • كاتب الموضوع

أممممممممممممممم

من الواضح أنه ليس هناك أي حلول سوي أن أقوم بالتعديل علي أكوادي من جديد !!!


شكراً للجميع

السلام عليكم

بتاريخ:

اسف استاذي الكبير

حاولت اني اسال عن موضوع ال wrap ولكن لم يفدني احد

بتاريخ:

آسف على التأخير


ولكن يبدو أنه ليس هناك من حل إلا باستخدام ال package

بتاريخ:
  • كاتب الموضوع

الأخوة الكرام ، متشكر جداً علي ردكم الجميل ومساعدتكم لي ،

عموماً ليس كل ما يتمناة المرء يجدة ... وطبعاً كل لغة برمجة أو كل Develobar لازم يكون فية نقص أو عيب !!!


شكراً جزيلاً

بتاريخ:
  • كاتب الموضوع

الأخوة الكرام عزراً علي فتح هذا الموضوع من جديد ،

ولكنني للأسف ظهرت لي مشكلة غريبة ولا أعلم ما سببها ،

بإختصار شديد أنا أشتغلت بأمر Wrap فترة يومين ، بس بعد كدة حدث مشكلة جعلت الملف Wrap.exe يرجع لي رسالة غريبة وغير مفهومة ... فقررت أن أعيد تنصيب الأوراكل من جديد ، ولكن للأسف أستمر الملف Wrap.exe علي عرض نفس الخطأ كل مرة ولا أدري ما هو السبب بالضبط !!!

عموماً الخطأ مدرج بالصورة المرفقة

أتمني مساعدتي لحل هذه المشكلة

شكراً

post-17253-1223034344_thumb.jpg

post-17253-1223034922_thumb.jpg

بتاريخ:
  • كاتب الموضوع

الإخوة الكرام أشكركم كل الشكر وآسف علي الإزعاج !!!

حيث قد وجدت حل مشكلتي بعد حوالي 10 دقائق من طرحي للموضوع في المنتدي ... رغم أنني أبحث عن سبب المشكلة من أسبوع تقريباً ... لكن قدر الله وما شاء فعل

عموماً هو حل المشكلة هو أن يتم تغيير NLS_Lang الي القيمة us ، وللأسف لا أعلم ما السبب في عملية تحويل اللغة الي هذه اللغة ، وذلك كما يلي :

C:\> set nls_lang = us

C:\> wrap iname=D:\Code.sql oname=D:\Code.plb



وهذا هو مسار الشرح :

http://www.orafaq.com/forum/t/13610/0/

إظاهر أن Wrap له قيود كثيرة !!!!!


شكراً مرة أخري ... وآسف جداً جداً علي إزعاجي لحضراتكم

خصوصاً الأخ والحبيب هاني hanyfreedom2007 .



السلام عليكم

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

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

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

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

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

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.