begin
begin
--取得记录数
v_dy_sql_cur :='select count(*) from'||as_tabname||' where bsflag=''1'' or bsflag=''2'' ';
execute immediate v_dy_sql_cur into v_rownum ;
EXCEPTION
WHEN OTHERS THEN
RETURN -1;--例外处理
end;
--声明动态游标, 取得rowid
v_dy_sql_cur :=' select rowid from '||as_tabname||' where bsflag=''1'' or bsflag=''2'' ';
open cur_dy_find for v_dy_dql_cur;
loop
fetch cur_dy_find into v_rowid;
exit when cur_dy_find%notfound;
f_db_s_getmodifydata_sava(as_tabname ,ai_dbtid ,v_rowid);
end loop;
close cur_dy_find;
return v_rownum;
end f_db_s_getmodifydata;楼主是否发生例外事件后,也一定要执行f_db_s_getmodifydata_sava(as_tabname ,ai_dbtid ,v_rowid); 此过程?
begin
--取得记录数
v_dy_sql_cur :='select count(*) from'||as_tabname||' where bsflag=''1'' or bsflag=''2'' ';
execute immediate v_dy_sql_cur into v_rownum ;
EXCEPTION
WHEN OTHERS THEN
RETURN -1;--例外处理
end;
--声明动态游标, 取得rowid
v_dy_sql_cur :=' select rowid from '||as_tabname||' where bsflag=''1'' or bsflag=''2'' ';
open cur_dy_find for v_dy_dql_cur;
loop
fetch cur_dy_find into v_rowid;
exit when cur_dy_find%notfound;
f_db_s_getmodifydata_sava(as_tabname ,ai_dbtid ,v_rowid);
end loop;
close cur_dy_find;
return v_rownum;
end f_db_s_getmodifydata;楼主是否发生例外事件后,也一定要执行f_db_s_getmodifydata_sava(as_tabname ,ai_dbtid ,v_rowid); 此过程?
create or replace function f_db_s_getmodifydata(as_tabname varchar2,ai_dbtid integer) return integer is
/***********************************************
*功能描述:根据传入的后台数据表的名称和标示,将其中需要报送的数据,生成动态SQL语句
* 保存到临时数据表中
*传入参数:as_tabname varchar2 后台数据表名称
* ai_dbtaid integer 后台数据表的标示
*返回值:成功,返回需要上报的数据行数,否则,出现异常,返回-1
*作者:陈敏
***********************************************/
v_rownum integer; --返回数据行数
v_fun_test integer; --程序执行判断
v_rowid varchar2(50); --数据记录的行标示
v_dy_sql_cur varchar2(300); --声明动态游标的字符串
cur_dy_find cursor;
begin
begin
--取得记录数
/*v_dy_sql_cur :='select count(*) from'||as_tabname||' where bsflag=''1'' or bsflag=''2'' ';*/
execute immediate v_dy_sql_cur into v_rownum ;
--删除其他数据表生成的纪录
execute immediate 'delete from temp_sendtable; commit;';
exception
when others then
return -1;
end;
--声明动态游标, 取得rowid
v_dy_sql_cur :=' select rowid from '||as_tabname||' where bsflag=''1'' or bsflag=''2'' ';
open cur_dy_find for v_dy_sql_cur;
fetch cur_dy_find into v_rowid;
while cur_dy_find%found loop
v_fun_test := f_db_s_getmodifydata_sava(as_tabname,ai_dbtid,v_rowid);
fetch cur_dy_find into v_rowid;
end loop;
close cur_dy_find;
return v_rownum;
exception
when others then
return -1;--例外处理
end f_db_s_getmodifydata;还是不能通过编译,出现如下的提示:
Compilation errors for FUNCTION KDCERP2.F_DB_S_GETMODIFYDATA
Error: PLS-00201: 必须说明标识符 'CURSOR'
Line: 14
Text: cur_dy_find cursor;Error: PL/SQL: Item ignored
Line: 14
Text: cur_dy_find cursor;Error: PLS-00320: 此表达式的类型说明不完整或格式错误
Line: 30
Text: open cur_dy_find for v_dy_sql_cur;Error: PL/SQL: Statement ignored
Line: 30
Text: open cur_dy_find for v_dy_sql_cur;Error: PLS-00320: 此表达式的类型说明不完整或格式错误
Line: 32
Text: fetch cur_dy_find into v_rowid;Error: PL/SQL: SQL Statement ignored
Line: 32
Text: fetch cur_dy_find into v_rowid;Error: PLS-00320: 此表达式的类型说明不完整或格式错误
Line: 33
Text: while cur_dy_find%found loopError: PL/SQL: Statement ignored
Line: 33
Text: while cur_dy_find%found loopError: PLS-00320: 此表达式的类型说明不完整或格式错误
Line: 37
Text: close cur_dy_find;Error: PL/SQL: SQL Statement ignored
Line: 37
Text: close cur_dy_find;
修改为:
type t_sor is ref cursor;
cur_dy_find t_sor;