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;
展开
 我来答
韩福洁
2013-12-18 · TA获得超过623个赞
知道小有建树答主
回答量:129
采纳率:100%
帮助的人:61.9万
展开全部
我看你存储过程执行完了没有commit,先在end p_focs_to_history之前加个commit;

如果还是没有数据的话,就要一步步调试,看看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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式