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

مساعدة ضرورية __ معادلة

Featured Replies

بتاريخ:

في البداية السلام عليكم ... انا بحاجة ل Function يقوم بعمل لتحليل لعملية حسابية كالآتي

الفنكشن يستقبل نص عبارة عن varchar2 كالاتي '5*2.54+4/2-1*10*2/4' ويقوم بارجاع ناتج العملية الحسابية مع الاخذ بعين الاعتبار الاولويات للقسمة والضرب اولا ثم الجمع والطرح ثانيا ايهما يبدأ من اليسار أولا .. علما بان النص لا يحتوي على الاقواس ,, اخواني من عندو فكرة عن الموضوع الرجاء اسعافي بها واكون لكم من الشاكرين وجزاكم الله خيرا.... مستعجل ....

بتاريخ:

السلام عليكم

يعني هل تريد الفانكشن بضبط الاوليات كأنها تتضع أقواس مثلا


لو أخذنا مثالك السابق كيف تريده أن يكون
أقصد أريد تحليله أنت
وان شاء الله نحاول فيها معا

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

'5*2.54+4/2-1*10*2/4'

هنا العملية الاولى هو بعث بارميتر هذه المعادلة كنص الى الفنكشن

داخل الفانكشن يحلل هذه المعادلة من نص باي طريقة كانت ويقوم بحساب عمليات الضرب والقسمة في البداية ايهما يبدأ من اليسار لليمين
:

1-) 4/2=2
5*2.54+4/2-1*10*2
2-)10*2=20
5*2.54+4/2-1*20
3-)20*1=20
5*2.54+4/2-20
4-) 2/4=0.5
5*2.54+0.5-20
5-)5*2.54=12.7
12.7+0.5-20
6-) 20-0.5=19.5
7-)12.7+19.5=32.2
32.2

اخي العزيز تبدأ المعادلة بالنص اعلاه ثم يرجع لنا الفنكشن الرقم الاخير 32.2 , المعادلة لا تحتوي على الاقواس فقط اربع عمليات قسمة وضرب وطرح وجمع وياخد بعين الاعتبارات الاولويات مثلا الضرب والقسمة نفس الاولوية واذا احتوت المعادلة على ضرب وقسمة نبدأ بحلها من اليسار واليمين , ثم اولوية الجمع والطرح واذا تساون من اليسار لليمين .

وشكرا لك

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

اعزائي وجدت الحل وهو كالتالي

PROCEDURE CALC_FORMULA(CALC VARCHAR2) IS
    source          VARCHAR2(500); 
    V_OUTPUT        NUMBER;
    source_cursor   INTEGER;
    IGNORE          INTEGER;
 BEGIN source_cursor := dbms_sql.open_cursor;
    DBMS_SQL.PARSE(source_cursor,
                   'SELECT '||CALC||' FROM DUAL', DBMS_SQL.NATIVE);
    DBMS_SQL.DEFINE_COLUMN(source_cursor, 1, V_OUTPUT);
    ignore := DBMS_SQL.EXECUTE(source_cursor);
      IF DBMS_SQL.FETCH_ROWS(source_cursor)>0 THEN
        DBMS_SQL.COLUMN_VALUE(source_cursor, 1, V_OUTPUT);
        DBMS_OUTPUT.PUT_LINE(V_OUTPUT);
      END IF;
  EXCEPTION
    WHEN OTHERS THEN
      IF DBMS_SQL.IS_OPEN(source_cursor) THEN
        DBMS_SQL.CLOSE_CURSOR(source_cursor);
      END IF;
 END;

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

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

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

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

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

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.