select
								 a.id,
						
						
								
										       
								
								max
								(text) text,
						
						
								
										       
								
								sum
								(regexp_substr(add_text,
								'[0-9]+'
								,
								1
								,n) 
								
										--
								
								
										
												依次找出第
										
										
												N
										
										
												个数字
										
										
												
												
										
								
						
						
								
										           *
						
						
								
										           decode(regexp_substr(
								'+'
								||add_text,
								'[^0-9]'
								,
								1
								,n),
								'+'
								,
								1
								,-
								1
								)) 
								
										--
								
								
										
												依次找出
										
										
												+|-
										
										
												,然后在后面的数字上乘以系数
										
										
												
												
										
								
						
						
								
										       
								
								
										--
								
								
										
												以上
										
										
												sum
										
										
												计算了所有
										
										
												+|-
										
										
												运算的总合计值
										
										
												
												
										
								
						
						
								
										       +
						
						
								
										       nvl(
								sum
								((
								select
								 decode(substr(regexp_substr(
								'+'
								||text,
								'[+|-]([0-9]+[*|/]+)+[0-9]+'
								,
								1
								,n),
								1
								,
								1
								),
								'+'
								,
								1
								,-
								1
								)
						
						
								
										                                     
								
								
										--
								
								
										
												找出
										
										
												+|-
										
										
												开头,并紧跟数字、
										
										
												[*|/]
										
										
												、数字的部分,依次根据第一位来判定系数
										
										
												
												
										
								
						
						
								
										       *
						
						
								
										       power(
								10
								,
								Sum
								(
								Log
								(
								10
								,decode(regexp_substr(
								'*'
								||regexp_substr(text,
								'([0-9]+[*|/]+)+[0-9]+'
								,
								1
								,n),
								'[^0-9]'
								,
								1
								,
								rownum
								),
						
						
								
										                                                     
								
								
										--
								
								
										
												找出第
										
										
												n
										
										
												个数字、
										
										
												[*|/]
										
										
												、数字相连的部分
										
										
												
												
										
								
						
						
								
										                                  
								
								
										--
								
								
										
												排除数字,找出前面找到的部分中的第
										
										
												rownum
										
										
												个非数字的字符
										
										
												(
										
										
												最前面加
										
										
												*)
										
										
												
												
										
								
						
						
								
										                          
										        
								
								'*'
								,
						
						
								
										                                  regexp_substr(regexp_substr(text,
								'([0-9]+[*|/]+)+[0-9]+'
								,
								1
								,n),
								'[0-9]+'
								,
								1
								,
								rownum
								),
						
						
								
										                                  
								
								
										--
								
								
										
												如果是
										
										
												'*'
										
										
												则,则直接找到
										
										
												*
										
										
												后面的数字部分
										
										
												
												
										
								
						
						
								
										                                  
								
								1
								/regexp_substr(regexp_substr(text,
								'([0-9]+[*|/]+)+[0-9]+'
								,
								1
								,n),
								'[0-9]+'
								,
								1
								,
								rownum
								)
						
						
								
										                                  
								
								
										--
								
								
										
												如果不是
										
										
												'*'(
										
										
												即
										
										
												/)
										
										
												,则用
										
										
												1/NUM
										
										
												
												
										
								
						
						
								
										                                  ))))
						
						
								
										       
								
								
										--
								
								
										
												外层通关
										
										
												LOG
										
										
												和
										
										
												POWER
										
										
												函数,把乘除法转换为加减法
										
										
												
												
										
								
						
						
								
										       
								
								from
								 dual 
								connect
								
								
								by
								
								
								rownum
								 <=len)
								
										--
								
								
										
												在这里再做一层循环,用于计算乘除法
										
										
												
												
										
								
						
						
								
										       ) ,
								0
								) wanted
						
						
								
										  
								
								from
								
										  
										
										
								
						
						
								
										       (
								select
								 a.id,
						
						
								
										               a.text,
						
						
								
										               length(regexp_replace(text,
								'[0-9]+'
								))+
								1
								 len, 
								
										--
								
								
										
												去掉数字计算运算符个数
										
										
												
												
										
								
						
						
								
										               regexp_replace(text,
								'([0-9]+[*|/]+)+[0-9]+'
								,
								0
								) add_text 
								
										--
								
								
										
												将
										
										
												*|/
										
										
												操作的数均用
										
										
												0
										
										
												代替
										
										
												
												
										
								
						
						
								
										          
								
								from
								 t_mar a) a,
						
						
								
										       (
								select
								
								
								rownum
								 n 
								from
								 dual 
								connect
								
								
								by
								
								
								rownum
								 < 
								100
								) b
						
						
								
										 
								
								where
								 a.len>=b.n 
								
										--
								
								
										
												可以直接形成从
										
										
												1
										
										
												到
										
										
												a.len
										
										
												的循环操作
										
										
												
												
										
								
						
						
								
										 
								
								group
								
								
								by
								
								
								id
								
										
										
								
						
						
								
										 
								
								order
								
								
								by
								
								
								id
								;