procedure RemoveData
(
 t_userId in number,                         --用户Id
 t_logType in number,                        
 t_logId in varchar2,                       
 ReturnCode out number                       --返回值
)
is
 nFileSize NUMBER(10) := 0;
 temp_sql varchar2(500);
begin  
  temp_sql := 'SELECT sum(fileSize) from blog_userPicturesHistory
  WHERE
  userId = ' || t_userId ||'
  AND pictureId IN(' || t_logId || ')';
                
  EXECUTE IMMEDIATE temp_sql INTO nFileSize;
  commit;
  EXCEPTION
    when OTHERS then
  rollback;
  raise;
  return;
end RemoveData;大家帮忙看看为啥nFileSize得到的值总是NULL???temp_sql的语句单独执行是可以得到值的,但是通过EXECUTE IMMEDIATE执行并赋给nFileSize,则只能得到空值。

解决方案 »

  1.   

    AND pictureId IN(' || t_logId || ')';
    写法有问题,楼主尝试替换成实际的数据进行测试,应该就没有问题
      

  2.   

    我换成AND pictureId IN(1051169)';还是有问题!
      

  3.   

    SELECT sum(fileSize) from blog_userPicturesHistory
    WHERE userId = &t_userId AND pictureId IN(&t_logId);
    可以正常执行么
      

  4.   

    to xiaoxiao1984(笨猫儿)
    不明白你的意思 为啥要换成&??
      

  5.   

    t_logId 是varchar2,要用‘’,改成:
    pictureId IN(''' || t_logId || ''')';
      

  6.   

    pictureid是什么类型的你如何看到那个值为空的  跟踪调试吗???