CREATE OR REPLACE TABLE QTEMP/TESTF0(
ID NUM(3) PRIMARY KEY,
STRID CHAR(3),
NUMSI SMALLINT,
NUMI INT,
NUMBI BIGINT
) RCDFMT TESTF0R;
我试图在QTEMP中创建一个表,但RUNSQLSTM命令失败,并显示以下ERRMSG
SQL7008 30 1 Position 1 TESTF0 in QTEMP not valid for operation.
我从DDL中取出合格的模式QTEMP并重试,这次我得到一个新的错误,但使用的是QGPL中的文件对象(不确定它的可用性如何)。
SQL7905 20 1 Position 1 Table TESTF0 in QGPL created but was not
journaled.
我知道命令RUNSQLSTM的一些细微差别,因此我在我的测试库中尝试了CHGCURLIB,并重新尝试了该命令,它工作得很好。
我读了一些关于SQL 7008分辨率的帖子,他们都建议记录PF。但是在我们有file对象之前这是不可能的。这让我想到,这是可能的,因为用户库默认情况下可能是日志记录的,而上面的ERRMSG是由于QGPL是这里的一个例外,显然QTEMP可能永远不会被日志记录???我很好奇。QTEMP表的解决方法是什么?
在处理这个问题时出现的另一个想法,它可能是IBM i Support Query/RFE,但让我先听听大家的意见。- 由于IBM正在努力使IBM i更现代化、更易于访问,并推动DDL的使用超过DDS,为什么RUNSQLSTM还不支持 *FILE对象?或者是一个更好的系统命令,可以提示用户在其中创建SQL对象的对象库?
1条答案
按热度按时间fykwrbwg1#
SQL 7008最常见的原因是表没有日志记录,但还有其他原因,您正面临着一个。SQL 7008和许多消息一样,提供了有关错误和如何恢复的更多详细信息。
你可能有原因代码10
10 -将约束或触发器添加到无效类型的表中,或已达到触发器的最大数量,或分布式表的所有节点不在同一版本级别。
您可以在QTEMP中创建表,但不能向QTEMP中的表添加约束(任何类型)或触发器,因此不能创建具有主键的表。作为解决方案,您可以在QTEMP中创建一个唯一的索引来“约束”您的表。
有两种方法可以判断表必须在哪个模式中使用SQL创建,在RUNSQLSTM或任何其他工具中:
但是,告诉它必须在哪里创建是不够的。QTEMP中没有对象可以被日志记录,这是真的,但在其他模式中,当使用SQL创建表时,在QGPL不填充的条件下,可以自动日志记录表: