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后才可以使用分析函数 之前不可以