--A:
UPDATE item_package b
   SET ratio = round((SELECT b.num * a.gold_price
                  FROM tbl_gold_item a
                 WHERE a.gold_item_id = b.gold_item_id)/100,4)
                 
                 
--B:                 
UPDATE item_package b
   SET ratio = (SELECT b.num * a.gold_price
                  FROM tbl_gold_item a
                 WHERE a.gold_item_id = b.gold_item_id)/100 其中A语句可以执行,B语句不能执行,提示说sql未正常结束,请大家帮忙解释一下, 为什么会这样,其中A和B的区别仅仅是A语句对等号 右边加上了round函数而已。

解决方案 »

  1.   

    UPDATE item_package b 
      SET ratio = (SELECT round(b.num * a.gold_price ,4)
                      FROM tbl_gold_item a 
                    WHERE a.gold_item_id = b.gold_item_id)/100 
      

  2.   

    UPDATE item_package b 
      SET ratio = ((SELECT b.num * a.gold_price 
                      FROM tbl_gold_item a 
                    WHERE a.gold_item_id = b.gold_item_id)/100 )
      

  3.   

     (SELECT b.num * a.gold_price 
                      FROM tbl_gold_item a 
                    WHERE a.gold_item_id = b.gold_item_id)
    你这个得到的是什么类型的数据?
      

  4.   

    3楼的写法也试了,还是说sql没正常结束,奇怪,不知道oracle是怎么解释这句话的
      

  5.   

    同事推荐这样写B语句:
    UPDATE item_package b 
      SET ratio = (SELECT b.num * a.gold_price /100
                      FROM tbl_gold_item a 
                    WHERE a.gold_item_id = b.gold_item_id)即,将除数写到select中,这样是可以的,只是不知道开始的写法问题在哪? 
      

  6.   

    oarcle10G,想来是和版本有关了,谢谢大家
      

  7.   

    你是一个一个执行的?还是把这两个sql放在一个窗口直接f8?
    UPDATE item_package b 
      SET ratio = round((SELECT b.num * a.gold_price 
                      FROM tbl_gold_item a 
                    WHERE a.gold_item_id = b.gold_item_id)/100,4) ; --加个分号
                    
                    
    --B:                
    UPDATE item_package b 
      SET ratio = (SELECT b.num * a.gold_price 
                      FROM tbl_gold_item a 
                    WHERE a.gold_item_id = b.gold_item_id)/100