一条sql语句单独能执行在程储过程中却不行,哪位帮我看看

massoft 2005-04-19 11:57:44
过程如下:
CREATE OR REPLACE PROCEDURE CALC_PRO_HEAT(CALC_TIME IN VARCHAR2) IS
/*计算calc_time月份的煤气GJ数,并更新到产品分配表ALLOT */
BEGIN
UPDATE ALLOT T
SET T.PRODUCT_HEAT = NVL((SELECT CALC_NUM * T.ALLOT_NUM
FROM VL_USERHEAT K
WHERE T.USER_ID = K.USER_ID AND
T.PDT_ID = K.PDT_ID AND
K.CALC_TIME = T.ALLOT_TIME),
0)
WHERE T.ALLOT_TIME = CALC_TIME;
IF SQL%FOUND THEN
COMMIT;
ELSE
NULL;
END IF;
END CALC_PRO_HEAT;


每次都是这个语句不行
UPDATE ALLOT T
SET T.PRODUCT_HEAT = NVL((SELECT CALC_NUM * T.ALLOT_NUM
FROM VL_USERHEAT K
WHERE T.USER_ID = K.USER_ID AND
T.PDT_ID = K.PDT_ID AND
K.CALC_TIME = T.ALLOT_TIME),
0)
WHERE T.ALLOT_TIME = CALC_TIME;
但是单独执行是可以的
到了程储过程中就会出现:

Compilation errors for PROCEDURE DLCREP.CALC_PRO_HEAT

Error: PLS-00103: 出现符号 "SELECT"在需要下列之一时:
(-+modnotnullothers
<an identifier><a double-quoted delimited-identifier>
<a bind variable>avgcountcurrentexistsmaxminpriorsqlstddev
sumvarianceexecuteforalltimetimestampintervaldate
<a string literal with character set specification>
<a number><a single-quoted SQL string>
Line: 5
Text: SET T.PRODUCT_HEAT = NVL((SELECT CALC_NUM * T.ALLOT_NUM

Error: PLS-00103: 出现符号 ","在需要下列之一时:
;returnreturningandor
Line: 9
Text: K.CALC_TIME = T.ALLOT_TIME),

Error: PLS-00103: 出现符号 "IF"
Line: 12
Text: IF SQL%FOUND THEN

Error: PLS-00103: 出现符号 "END"
Line: 17
Text: END CALC_PRO_HEAT;


哪位能帮我解决一下,数据库是8i的,在9i中执行是没有错误的


...全文
141 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxc 2005-04-19
  • 打赏
  • 举报
回复
试试:
UPDATE ALLOT T
SET T.PRODUCT_HEAT = (SELECT NVL(CALC_NUM * T.ALLOT_NUM ,'0')
FROM VL_USERHEAT K
WHERE T.USER_ID = K.USER_ID AND
T.PDT_ID = K.PDT_ID AND
K.CALC_TIME = T.ALLOT_TIME)
WHERE T.ALLOT_TIME = CALC_TIME;
zsq666 2005-04-19
  • 打赏
  • 举报
回复
up
baojianjun 2005-04-19
  • 打赏
  • 举报
回复
那就先判斷是否有數據存在
Alkeen 2005-04-19
  • 打赏
  • 举报
回复
这样的情况那就只好先用IF判断下再update了。
massoft 2005-04-19
  • 打赏
  • 举报
回复
TO : jxc(GameHeart)
你的这种做法是可行,我也试过,但是有个情况就是如果Select是null的话,那就更新到数据库了
baojianjun 2005-04-19
  • 打赏
  • 举报
回复
樓上的試試

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧