oracle存储过程测试没有报错为啥没有数据插入
CREATEORREPLACEPROCEDUREp_focs_to_history(v_update_timeinvarchar2,V_ERRORCODEoutvarch...
CREATE OR REPLACE PROCEDURE p_focs_to_history (
v_update_time in varchar2,
V_ERRORCODE out varchar2,
V_ERRORMSG out varchar2
)
AS
update_time date;
begin
v_errorcode := '0'; -- 错误代码
v_errormsg := 'ok'; -- 错误信息
update_time := to_date(v_update_time, 'yyyy-mm-dd hh24:mi:ss');
-----清理临时表数据
execute immediate 'truncate table ti_b_synchinfo_focs_tmp';
begin
-----临时表插入数据
insert into ti_b_synchinfo_focs_tmp select s.sync_sequence from ti_b_synchinfo_focs s where s.state='8' and s.update_time < update_time ;
-----利用临时表传入历史表数值
BEGIN
insert into ucr_crm1.ti_bh_synchinfo_focs select * from ti_b_synchinfo_focs a where exists(select * from ti_b_synchinfo_focs_tmp b where b.sync_sequence = a.sync_sequence );
----利用临时表的字段条件插入子表的数据
begin
insert into ti_bh_user_focs select s.* from ti_b_user_focs s where s.sync_sequence in (select s.sync_sequence from ti_b_synchinfo_focs_tmp s );
-----删除子表的在用表数据
begin
delete from ti_b_user_focs s where s.sync_sequence in ( select s.sync_sequence from ti_b_synchinfo_focs_tmp s );
-----删除主表数据
delete from ti_b_synchinfo_focs s where s.state='8' and s.update_time < update_time ;
end p_focs_to_history; 展开
v_update_time in varchar2,
V_ERRORCODE out varchar2,
V_ERRORMSG out varchar2
)
AS
update_time date;
begin
v_errorcode := '0'; -- 错误代码
v_errormsg := 'ok'; -- 错误信息
update_time := to_date(v_update_time, 'yyyy-mm-dd hh24:mi:ss');
-----清理临时表数据
execute immediate 'truncate table ti_b_synchinfo_focs_tmp';
begin
-----临时表插入数据
insert into ti_b_synchinfo_focs_tmp select s.sync_sequence from ti_b_synchinfo_focs s where s.state='8' and s.update_time < update_time ;
-----利用临时表传入历史表数值
BEGIN
insert into ucr_crm1.ti_bh_synchinfo_focs select * from ti_b_synchinfo_focs a where exists(select * from ti_b_synchinfo_focs_tmp b where b.sync_sequence = a.sync_sequence );
----利用临时表的字段条件插入子表的数据
begin
insert into ti_bh_user_focs select s.* from ti_b_user_focs s where s.sync_sequence in (select s.sync_sequence from ti_b_synchinfo_focs_tmp s );
-----删除子表的在用表数据
begin
delete from ti_b_user_focs s where s.sync_sequence in ( select s.sync_sequence from ti_b_synchinfo_focs_tmp s );
-----删除主表数据
delete from ti_b_synchinfo_focs s where s.state='8' and s.update_time < update_time ;
end p_focs_to_history; 展开
1个回答
展开全部
我看你存储过程执行完了没有commit,先在end p_focs_to_history之前加个commit;
如果还是没有数据的话,就要一步步调试,看看insert into 后面的select语句是不是没有数据。
如果还是没有数据的话,就要一步步调试,看看insert into 后面的select语句是不是没有数据。
追问
EXCEPTION WHEN OTHERS THEN
BEGIN
V_ERRORCODE := SQLCODE;
V_ERRORMSG := ' Err5: ' || SQLERRM(V_ERRORCODE);
ROLLBACK;
EXCEPTION WHEN OTHERS THEN NULL;
END;
END;
这样可以不?
追答
你在存储过程结束之前加个commit先,因为按照你的描述测试没有报错,就也没有处理异常的必要了,我看你的语句没有啥问题,如果有数据但是执行后查不到数据的话应该是没有commit
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询