我正在使用一个带有一些会话表的存储过程。在我用新数据测试存储过程之前,一切都运行得很好。
用于检索会话表之外的数据的游标按预期返回记录,但是,当同一游标用于会话表时,会话表中没有写入任何内容。
INSERT INTO SESSION.TEMP_UNTIL (CUSTOMID, UNTIL)
WITH PERIODS AS (
SELECT NAT.UNTIL FROM TOPM.NATIONALITYHIST NAT WHERE NAT.CUSTOMID = custId
UNION
SELECT CIVIL.UNTIL FROM TOPM.MARITALSTATUSHIST CIVIL WHERE CIVIL.CUSTOMID = custId
UNION
SELECT COUNTRY.UNTIL FROM TOPM.COUNTRYOFRESIDENCEHIST COUNTRY WHERE COUNTRY.CUSTOMID = custId
)
SELECT custId, PERIODS.UNTIL FROM PERIODS ORDER BY PERIODS.UNTIL ASC;
可能是什么原因导致了这样的行为,怎样才能避免上述行为?
临时表声明如下:
DECLARE GLOBAL TEMPORARY TABLE TEMP_UNTIL (
CUSTOMID VARCHAR(36), UNTIL DATE
)
2条答案
按热度按时间643ylb081#
DECLARE GLOBAL TEMOPORARY TABLE
得缺省值为DELETE ON COMMIT
,因此这些行只在事务得生命周期内存在于临时表中.您需要执行单一交易范围内的所有工作,或在
DECLARE GLOBAL TEMPORARY TABLE
陈述式中加入ON COMMIT PRESERVE ROWS
子句。例如:wsxa1bj12#
当您在客户端工具中关闭自动提交的情况下运行脚本时,以下
select count(1) ...
语句(按原样)和未注解的on commit preserve rows
行的结果是什么?