1. 程式人生 > >Oracle 函式實現動態解析公式字串

Oracle 函式實現動態解析公式字串

在工作當中,需要利用函式實現動態解析公式字串的功能。由於時間有限,以及業務需求,目前不支援一個計算公式中同時出現兩個小括號疊加出現的情況。如a+(b+(c-d))這種情況,但對於類似a+b*(c+d)/e-f*(g-h) 的情況是可以處理的。程式碼如下:

 需要注意的是,對於正則匹配,如果寫成 REGEX_SUBSTR(str, '[+]') 的形式,不需要進行轉義,如果寫成 REGEX_SUBSTR(str, '\+') 的形式,則需要轉義。

CREATE OR REPLACE 
FUNCTION FUNC_GET_CALC(in_calc NVARCHAR2) RETURN  NUMBER IS 
 RESULT NUMBER;
BEGIN
       CASE
 --括號出現在字串開頭
          WHEN INSTR(in_calc, '(') =  1 THEN  --括號有可能出現在字串開始、中間、末尾三個地方
           CASE 
							WHEN REGEXP_SUBSTR(in_calc, '[0-9|#]', INSTR(in_calc, '(') + 1)  IS NOT NULL THEN --括號後是指標,暫時不考慮括號後還有括號的情況
								 CASE 
											WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '+' THEN RETURN ((FUNC_GET_CALC(SUBSTR(in_calc,2,INSTR(in_calc, ')')-2))) + FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
											WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '-' THEN RETURN ((FUNC_GET_CALC(SUBSTR(in_calc,2,INSTR(in_calc, ')')-2))) - FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ;  --')'後是'+'
											WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '*' THEN RETURN ((FUNC_GET_CALC(SUBSTR(in_calc,2,INSTR(in_calc, ')')-2))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
											WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '/' THEN RETURN ((FUNC_GET_CALC(SUBSTR(in_calc,2,INSTR(in_calc, ')')-2))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+' 
								 END CASE;
           END CASE;
           --括號出現在字串末尾 
					 WHEN INSTR(in_calc, '(') >  1 AND  INSTR(in_calc, ')') = LENGTH(in_calc)  THEN  --括號出現在字串末尾
           CASE 
							WHEN REGEXP_SUBSTR(in_calc, '[0-9|#]', INSTR(in_calc, '(') + 1)  IS NOT NULL  THEN --括號後是指標,暫時不考慮括號後還有括號的情況
								 CASE 
											WHEN 	SUBSTR(in_calc, INSTR(in_calc, '(') - 1, 1) = '+' THEN RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 , LENGTH(in_calc)-INSTR(in_calc, '(') - 1 )))) ; --'('前是'+'
											WHEN 	SUBSTR(in_calc, INSTR(in_calc, '(') - 1, 1) = '-' THEN RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) - (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,LENGTH(in_calc)-INSTR(in_calc, '(')  - 1 )))) ;  --'('前是'+'
											WHEN 	SUBSTR(in_calc, INSTR(in_calc, '(') - 1, 1) = '*' THEN RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,LENGTH(in_calc)-INSTR(in_calc, '(')  - 1 )))) ; --'('前是'+'
											WHEN 	SUBSTR(in_calc, INSTR(in_calc, '(') - 1, 1) = '/' THEN RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,LENGTH(in_calc)-INSTR(in_calc, '(')  - 1 )))) ; --'('前是'+' 
								 END CASE;
           END CASE;

--括號出現在字串中間
          WHEN INSTR(in_calc, '(') >  1 AND  INSTR(in_calc, ')') < LENGTH(in_calc)  THEN  --括號出現在字串中間
           CASE 
							WHEN REGEXP_SUBSTR(in_calc, '[0-9|#]', INSTR(in_calc, '(') + 1)  IS NOT NULL  THEN --括號後是指標,暫時不考慮括號後還有括號的情況
								 CASE 
											WHEN 	SUBSTR(in_calc, INSTR(in_calc, '(') - 1, 1) = '+' THEN 
                         CASE
													  	WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '+' THEN RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) + FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
															WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '-' THEN RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) - FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
															WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '*' THEN   --存在運算子優先順序的問題,因此需要特殊處理 如2*(2+3)/2+1 , 如果拆分成2 、*、(2+3)、/、2+1 ,五個部分,則結果出錯
																		IF   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+|-|*|/|(]') > 0 THEN
																						CASE 
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') -1 )) + FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]')  ) ) ) ; --')'後是'+'
																										
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') -1 )) - FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') -1 )) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') -1 )) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]')   ) ) ) ; --')'後是'+'

																				END CASE;	
																		ELSE
																				RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'

																		END IF;																	
															WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '/' THEN 
																		IF  REGEXP_INSTR(SUBSTR('in_calc', INSTR('in_calc', ')')+2), '[+|-|*|/|(]') > 0 THEN
																				CASE 
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') -1 )) + FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') ) ) ) ; --')'後是'+'
																										
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') -1 )) - FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]')  ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') -1 )) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]')  ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') -1 )) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]')   ) ) ) ; --')'後是'+'

																				END CASE;	
																		ELSE
																				RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'

																		END IF;	

-- RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) + (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
												 END CASE;
												 			
										WHEN 	SUBSTR(in_calc, INSTR(in_calc, '(') - 1, 1) = '-' THEN 
                         CASE
													  	WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '+' THEN RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) - (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) + FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
															WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '-' THEN RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) - (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) - FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
															WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '*' THEN 
																		IF   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+|-|*|/|(]') > 0 THEN
																					CASE 
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) - (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') -1 )) + FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') ) ) ) ; --')'後是'+'
																										
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) - (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') -1 )) - FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]')  ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) - (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') -1 )) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]')  ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) - (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') -1 )) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]')   ) ) ) ; --')'後是'+'

																				END CASE;	
																		ELSE
																				RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) - (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'

																		END IF;	

								WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '/' THEN 
																IF   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+|-|*|/|(]') > 0 THEN
																		CASE 
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) - (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') -1 )) + FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]')  ) ) ) ; --')'後是'+'
																										
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) - (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') -1 )) - FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) - (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') -1 )) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]')  ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) - (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') -1 )) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]')   ) ) ) ; --')'後是'+'

																				END CASE;	
																ELSE
																		RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'

																END IF;	
								END CASE;
										 


										WHEN 	SUBSTR(in_calc, INSTR(in_calc, '(') - 1, 1) = '*' THEN 
                         CASE
													  	WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '+' THEN RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) + FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
															WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '-' THEN RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) - FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
															WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '*' THEN 
																	IF   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+|-|*|/|(]') > 0 THEN
																				CASE 
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') -1 )) + FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]')  ) ) ) ; --')'後是'+'
																										
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') -1 )) - FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]')  ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') -1 )) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') -1 )) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]')   ) ) ) ; --')'後是'+'

																				END CASE;	
																	ELSE
																			RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'

																	END IF;	
--RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
															
															WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '/' THEN 
																	IF   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+|-|*|/|(]') > 0 THEN
																			CASE 
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') -1 )) + FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]')  ) ) ) ; --')'後是'+'
																										
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') -1 )) - FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]')  ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') -1 )) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]')  ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') -1 )) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]')   ) ) ) ; --')'後是'+'

																				END CASE;	
																	ELSE
																			RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'

																	END IF;	
					--RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) * (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
												 END CASE;
 
										 WHEN 	SUBSTR(in_calc, INSTR(in_calc, '(') - 1, 1) = '/' THEN 
                         CASE
													  	WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '+' THEN RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) + FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
															WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '-' THEN RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) - FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
															WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '*' THEN 
																	IF   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+|-|*|/|(]') > 0 THEN
																				CASE 
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') -1 )) + FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]')  ) ) ) ; --')'後是'+'
																										
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') -1 )) - FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]')  ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') -1 )) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]')  ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') -1 )) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]')   ) ) ) ; --')'後是'+'

																				END CASE;	
																ELSE
																		RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'

																END IF;	
--RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
															WHEN 	SUBSTR(in_calc, INSTR(in_calc, ')') + 1, 1) = '/' THEN 
																		IF   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+|-|*|/|(]') > 0 THEN
																				CASE 
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]') -1 )) + FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[+]')  ) ) ) ; --')'後是'+'
																										
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]') -1 )) - FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\-]')  ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]') -1 )) * FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[\*]')  ) ) ) ; --')'後是'+'
																						
																						WHEN   REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') > 0  THEN 
																								RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2,  REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]') -1 )) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2 + REGEXP_INSTR(SUBSTR(in_calc, INSTR(in_calc, ')')+2), '[/]')   ) ) ) ; --')'後是'+'

																				END CASE;	
															ELSE
																	RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'

															END IF;	
--RETURN (FUNC_GET_CALC(SUBSTR(in_calc,1,INSTR(in_calc, '(')-2)) / (FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, '(') + 1 ,(INSTR(in_calc, ')')-INSTR(in_calc, '(')-1)))) / FUNC_GET_CALC(SUBSTR(in_calc,INSTR(in_calc, ')') + 2) )) ; --')'後是'+'
												 END CASE;
 
								 END CASE;
           END CASE;

  				WHEN INSTR(in_calc, '+') >  0 THEN
					 	RETURN(FUNC_GET_CALC(SUBSTR(in_calc, 1 , INSTR(in_calc, '+') - 1)   ) + FUNC_GET_CALC(SUBSTR(in_calc,  INSTR(in_calc, '+') + 1)  ));  -- ????'+';
          WHEN INSTR(in_calc, '-') >  0 THEN  
								RETURN(FUNC_GET_CALC(SUBSTR(in_calc, 1 , INSTR(in_calc, '-') - 1)  ) - FUNC_GET_CALC(SUBSTR(in_calc,  INSTR(in_calc, '-') + 1)  ));   -- ????'-'
  				WHEN INSTR(in_calc, '*') >  0 THEN  
								RETURN(FUNC_GET_CALC(SUBSTR(in_calc, 1 , INSTR(in_calc, '*') - 1)  ) * FUNC_GET_CALC(SUBSTR(in_calc,  INSTR(in_calc, '*') + 1)  ));   --  ????'*'
  				WHEN INSTR(in_calc, '/') >  0 THEN 
								RETURN(FUNC_GET_CALC(SUBSTR(in_calc, 1 , INSTR(in_calc, '/') - 1)  ) / FUNC_GET_CALC(SUBSTR(in_calc,  INSTR(in_calc, '/') + 1)  ));   --????'/'  
  		 		WHEN INSTR(in_calc, '#') > 0 THEN  
--               RESULT := FUNC_QUERY_VALUE( projID, sampID, REPLACE(in_calc, '#') , startDate );
							RESULT :=  1 ;
							RETURN RESULT;
  			  ELSE  
							RETURN(CAST(in_calc AS NUMBER));
       END CASE;
END;