بتاريخ: 10 نوفمبر 200916 سنة comment_176074 في البداية السلام عليكم ... انا بحاجة ل Function يقوم بعمل لتحليل لعملية حسابية كالآتيالفنكشن يستقبل نص عبارة عن varchar2 كالاتي '5*2.54+4/2-1*10*2/4' ويقوم بارجاع ناتج العملية الحسابية مع الاخذ بعين الاعتبار الاولويات للقسمة والضرب اولا ثم الجمع والطرح ثانيا ايهما يبدأ من اليسار أولا .. علما بان النص لا يحتوي على الاقواس ,, اخواني من عندو فكرة عن الموضوع الرجاء اسعافي بها واكون لكم من الشاكرين وجزاكم الله خيرا.... مستعجل .... تقديم بلاغ
بتاريخ: 10 نوفمبر 200916 سنة comment_176084 السلام عليكم يعني هل تريد الفانكشن بضبط الاوليات كأنها تتضع أقواس مثلالو أخذنا مثالك السابق كيف تريده أن يكونأقصد أريد تحليله أنت وان شاء الله نحاول فيها معا تقديم بلاغ
بتاريخ: 10 نوفمبر 200916 سنة كاتب الموضوع comment_176089 '5*2.54+4/2-1*10*2/4'هنا العملية الاولى هو بعث بارميتر هذه المعادلة كنص الى الفنكشنداخل الفانكشن يحلل هذه المعادلة من نص باي طريقة كانت ويقوم بحساب عمليات الضرب والقسمة في البداية ايهما يبدأ من اليسار لليمين:1-) 4/2=2 5*2.54+4/2-1*10*22-)10*2=20 5*2.54+4/2-1*203-)20*1=20 5*2.54+4/2-204-) 2/4=0.5 5*2.54+0.5-205-)5*2.54=12.7 12.7+0.5-206-) 20-0.5=19.57-)12.7+19.5=32.2 32.2 اخي العزيز تبدأ المعادلة بالنص اعلاه ثم يرجع لنا الفنكشن الرقم الاخير 32.2 , المعادلة لا تحتوي على الاقواس فقط اربع عمليات قسمة وضرب وطرح وجمع وياخد بعين الاعتبارات الاولويات مثلا الضرب والقسمة نفس الاولوية واذا احتوت المعادلة على ضرب وقسمة نبدأ بحلها من اليسار واليمين , ثم اولوية الجمع والطرح واذا تساون من اليسار لليمين .وشكرا لك تقديم بلاغ
بتاريخ: 12 نوفمبر 200916 سنة كاتب الموضوع comment_176287 اعزائي وجدت الحل وهو كالتالي 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; تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.