WORK_YEARS字段是什么类型?还有你这句根本就是
UPDATE LANWAN.HR_J_EMPLOYEESALARY L
   SET L.MONEY = (SELECT 2*A.WORK_YEARS*A.WORK_YEARS
                         FROM LANWAN.HR_J_EMPLOYEEINFORM A
                        WHERE A.WORKER_CODE = L.WORKER_CODE)
WHERE L.PUT_YEAR = 2005
   AND L.PUT_MONTH = 01
   AND L.SALARY_TYPE_CODE = 0001
   AND L.INCOME_ITEM_CODE = 0001  

解决方案 »

  1.   

    ORARichard(没钱的日子......) 说的有道理。
      

  2.   

    哦?楼主碰到这么诡异的问题呀.同意ORARichard(没钱的日子......)的语句
      

  3.   

    运行完第一句,楼主commit一次,然后运行第二次试试!
      

  4.   

    我这么写只是为了方便
    ((SELECT A.WORK_YEARS
                             FROM LANWAN.HR_J_EMPLOYEEINFORM A
                            WHERE A.WORKER_CODE = L.WORKER_CODE) *
                     (SELECT B.WORK_YEARS
                         FROM LANWAN.HR_J_EMPLOYEEINFORM B
                        WHERE B.WORKER_CODE = L.WORKER_CODE) * 2)
    这一句是为了测试可不可以从两个表里选择,我当然知道可以直接在select语句里乘,像没钱的日子说的,我只是为了方便,A和B用了一个表而已。
    关键的问题在于这个数字, 为什么 2* 放前面就行,而 *2放后面就不行呢
      

  5.   

    在sqlplus执行你的语句,把执行情况拷贝出来看看,我觉得你的语句乘以2之前把前面的语句多加一个括号试试。