LOOKUP_B和LOOKUP_C是什么?
set后面的 B,C,D之间没有逗号吗?

解决方案 »

  1.   

    LOOKUP_B和LOOKUP_C是什么?   估计是用户自定义函数吧
    set后面的 B,C,D之间没有逗号吗?  应该是笔误吧
      

  2.   

    看看LOOKUP_B,LOOKUP_C有什么问题.
      

  3.   

    GerryYang(轻尘) 讨论一下我觉得应该和LOOKUP_B,LOOKUP_C不相关啊,因为D=B+C,取的是insert插入的B,C,并没有用到这两个函数啊
      

  4.   

    你可以试试
    update A set
    D=B + C
    WHERE YEAR='2004'就是不用LOOKUP_B,LOOKUP_C,会不会OK
      

  5.   

    LOOKUP_B,LOOKUP_C,就好像是查找当前记录的B和C列的值。
    如果是这样就可以合并为一个存储过程。
    ===================================================
    调用第一个存储过程,执行INSERT后COMMIT了吗?
      

  6.   

    update A set
    B=NVL(LOOKUP_B(A),0)
    C=NVL(LOOKUP_C(A),0)
    D=B + C
    WHERE YEAR='2004'这里的D=B+C=NVL(LOOKUP_B(A),0)+C=NVL(LOOKUP_C(A),0)至于为什么=0,要看看前面的b和c为什么=0了问题因该还是两个自定义函数的问题
      

  7.   

    update A set
    B=NVL(LOOKUP_B(A),0),
    C=NVL(LOOKUP_C(A),0),
    D=NVL(LOOKUP_B(A),0) + NVL(LOOKUP_C(A),0)
    WHERE YEAR='2004'
      

  8.   

    to  NinGoo(宁哥):
    这里的D=B+C=NVL(LOOKUP_B(A),0)+C=NVL(LOOKUP_C(A),0)你建张表做做看,是你的结论吗?
      

  9.   

    不好意思,忘了给大家说明了B,C,D之间没有逗号是笔误,LOOKUP_B(A)和LOOKUP_C(A),是我写的自定义函数,里面只有一个游标,就是根据A的值求和以后得到B,C的值.需要更新的记录大概3万条,实在没办法,我改成
    update A set
    B=NVL(LOOKUP_B(A),0),
    C=NVL(LOOKUP_C(A),0),
    D=NVL(LOOKUP_B(A),0) + NVL(LOOKUP_C(A),0)
    WHERE YEAR='2004'
    这样没问题
    但为什么B+C就不行啊,要知道更新3万条记录重复LOOKUP一次要多花时间的.
      

  10.   

    再说明一点,调用第一个存储过程后,我COMMIT了的
    也出先同样的问题,真是奇怪了.
      

  11.   

    D=NVL(LOOKUP_B(A),0) + NVL(LOOKUP_C(A),0)
    和D=B+C是完全不同的用错了会造成不可挽回的损失建议楼主建个小表做些测试,看看到底是要用哪种方式去做更新
      

  12.   

    ORARichard(没钱的日子......)
    你说的不错,但是从贴子分析,业务的逻辑应该是
    D=NVL(LOOKUP_B(A),0) + NVL(LOOKUP_C(A),0),我也是猜的。
      

  13.   

    感觉问题不是出在insert上,应该是出在别的问题上不过你写的也有问题
    update A set
    B=NVL(LOOKUP_B(A),0)
    C=NVL(LOOKUP_C(A),0)
    D=B + C
    WHERE YEAR='2004'应该这么写
    update A set
    B=NVL(LOOKUP_B(A),0)
    C=NVL(LOOKUP_C(A),0)
    D=NVL(LOOKUP_B(A),0) + NVL(LOOKUP_C(A),0)
    WHERE YEAR='2004'
      

  14.   

    onejune4450(中文字符) 我觉得也是这样的,如果是的话可以分成两句去做1   update tb set b=...,c=...
    2   update tb set d=...这样好象会快些。不用做两次lookup函数了
      

  15.   

    onejune4450(中文字符) 我觉得也是这样的,如果是的话可以分成两句去做1   update tb set b=...,c=...
    2   update tb set d=...这样好象会快些。不用做两次lookup函数了