日期:2014-05-17  浏览次数:21192 次

急!!!row_number()over(partition by 用在存储过程中无效,恳请高手相助!!
create or replace procedure SaveStock2 as  
str_sql varchar2(500); 
begin  

  str_sql:= ' insert into tf_test select * from(select tf2.*,row_number()over(partition by stock_id order by cjdate desc) rn from tf2 ) where rn <=1 '; 
  execute immediate str_sql; 
  commit;  
  exception  
  when others then  
  rollback;  
  dbms_output.put_line(SQLERRM);  

end;

这个存储过程执行后没有向tf_test中插入任何数据,但是单独运行str_sql内的代码却又可以插入数据,实在不知道为什么,本人用的oracle是8i版本的,一开始的时候没有用动态sql的时候会报编译错误,后来改用动态sql也就是如上的形式,却有发现语句无效,请问分析函数row_number()over(partition by)是不是不能用在存储过程中呢?

------解决方案--------------------
9i后才可以使用分析函数 之前不可以