Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;DB2在QTEMP中清除非日志表 我开发了一个C++程序,通过数据获取和过滤,并将其存储在DB2 AS400的QTEMP库中的一个时态表(P6SIFFCH)。_C++_Sql_Db2_Ibm Midrange - Fatal编程技术网

C++;DB2在QTEMP中清除非日志表 我开发了一个C++程序,通过数据获取和过滤,并将其存储在DB2 AS400的QTEMP库中的一个时态表(P6SIFFCH)。

C++;DB2在QTEMP中清除非日志表 我开发了一个C++程序,通过数据获取和过滤,并将其存储在DB2 AS400的QTEMP库中的一个时态表(P6SIFFCH)。,c++,sql,db2,ibm-midrange,C++,Sql,Db2,Ibm Midrange,这样做的原因是,我们使用PLEX,它有一个定义的方法,一次获取64条记录的数据块,因此称为SQLBlockFetch的函数将所有记录获取到一个时态表中,并且一次仅从这个临时表返回64条记录,并按此进行处理 我正在开发自己的SQLBoCKFCH,C++的一部分是使用嵌入式SQL来完成所有SQL查询。它正在获取创建QTEMP库中的表(P6SUBFCH)的所有数据 QTEMP库在会话中处于活动状态,一旦会话结束,该库中的所有表都将被删除 还要注意的是,QTEMP中的所有表都没有日志记录,从我在goog

这样做的原因是,我们使用PLEX,它有一个定义的方法,一次获取64条记录的数据块,因此称为SQLBlockFetch的函数将所有记录获取到一个时态表中,并且一次仅从这个临时表返回64条记录,并按此进行处理

我正在开发自己的SQLBoCKFCH,C++的一部分是使用嵌入式SQL来完成所有SQL查询。它正在获取创建QTEMP库中的表(P6SUBFCH)的所有数据

QTEMP库在会话中处于活动状态,一旦会话结束,该库中的所有表都将被删除

还要注意的是,QTEMP中的所有表都没有日志记录,从我在google上的研究来看,这是不可能的

问题
我的C++程序第一次在会话中调用很好,但是第二次,它只是把数据附加到表QTEMP/p6SufCH中的以前的数据。这是一个问题,我尝试先清除数据(SQL DELETE语句),但在AS400作业日志中出现此SQL错误

Member P6SUBFCH not journaled to journal *N.
P6SUBFCH in QTEMP not valid for operation.  
SQL错误:-7008

我读了以下内容

禁用事务隔离

不确定这是否是我的问题?我对嵌入式SQL还是个新手,不知道该怎么做

这是我的密码:

void LinkRepository::SaveResultsToTable(InputParameters inputParameters)
{
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char Query2[2000] = { "" };
char Query3[2000] = { "" };

EXEC SQL END DECLARE SECTION;

strcpy(Query2, "CREATE TABLE QTEMP/P6SUBFCH");
strcat(Query2, " (PAOPIID CHAR(21) NOT NULL,");
strcat(Query2, " POPITPE CHAR(10),");
strcat(Query2, " POPISTPE CHAR(10),");
strcat(Query2, " POPIKNID CHAR(20),");
strcat(Query2, " PINSTAT CHAR(10),");
strcat(Query2, " PLEAFIND CHAR(1),");
strcat(Query2, " CLOPIID CHAR(21),");
strcat(Query2, " COPITPE CHAR(10),");
strcat(Query2, " COPISTPE CHAR(10),");
strcat(Query2, " COPIKNID CHAR(20),");
strcat(Query2, " CINSTAT CHAR(10),");
strcat(Query2, " CLEAFIND CHAR(1),");
strcat(Query2, " LINKIN CHAR(10))");

EXEC SQL EXECUTE IMMEDIATE :Query2;

// Error handling
if (sqlca.sqlcode == -601)
{
     strcpy(Query2, "DELETE FROM QTEMP/P6SUBFCH");

     EXEC SQL EXECUTE IMMEDIATE :Query2;

}

EXEC SQL COMMIT;

// Datalinks is a vector that has all the filter data to insert into the QTEMP/P6SUBFCH table
for(vector<Datalink*>::iterator dl = Datalinks.begin(); dl != Datalinks.end(); ++dl)
{
     EXEC SQL SET TRANSACTION ISOLATION LEVEL NO COMMIT;

     strcpy(Query3, "INSERT INTO QTEMP/P6SUBFCH (PAOPIID,POPITPE,");
     strcat(Query3, "POPISTPE,POPIKNID,PINSTAT,PLEAFIND,");
     strcat(Query3, "CLOPIID,COPITPE,COPISTPE,COPIKNID,CINSTAT,");
     strcat(Query3, "CLEAFIND,LINKIN)");
     strcat(Query3, "VALUES('");
     strcat(Query3, (*dl)->ParentOperationsItemId);
     strcat(Query3, "','");
     strcat(Query3, (*dl)->ParentOperationsItemType);
     strcat(Query3, "','");
     strcat(Query3, (*dl)->ParentOperationsItemSubType);
     strcat(Query3, "','");
     strcat(Query3, (*dl)->ParentKnownbyId);
     strcat(Query3, "','");
     strcat(Query3, (*dl)->ParentInternalStatus);
     strcat(Query3, "','");
     append_char(Query3, (*dl)->ParentLeafIndicator);
     strcat(Query3, "','");
     strcat(Query3, (*dl)->ChildOperationsItemId);
     strcat(Query3, "','");
     strcat(Query3, (*dl)->ChildOperationsItemType);
     strcat(Query3, "','");
     strcat(Query3, (*dl)->ChildOperationsItemSubType);
     strcat(Query3, "','");
     strcat(Query3, (*dl)->ChildKnownbyId);
     strcat(Query3, "','");
     strcat(Query3, (*dl)->ChildInternalStatus);
     strcat(Query3, "','");
     append_char(Query3, (*dl)->ChildLeafIndicator);
     strcat(Query3, "','");
     strcat(Query3, (*dl)->LinkInternalStatus);
     strcat(Query3, "')");

     EXEC SQL EXECUTE IMMEDIATE :Query3;

     EXEC SQL COMMIT;
}
};
void LinkRepository::SaveResultsToTable(InputParameters InputParameters)
{
execsql包括SQLCA;
execsqlbegindeclare部分;
字符查询2[2000]={''};
字符查询3[2000]={''};
execsqlend声明部分;
strcpy(查询2,“创建表QTEMP/p6subch”);
strcat(Query2),(paopid字符(21)不为空,”;
strcat(查询2,“POPITPE字符(10)”;
strcat(查询2,“POPISTPE字符(10)”;
strcat(查询2,“POPIKNID字符(20)”;
strcat(查询2,“PINSTAT字符(10)”;
strcat(查询2,“PLEAFIND CHAR(1)”;
strcat(查询2,“氯吡咯字符(21)”;
strcat(查询2,“复制字符(10)”;
strcat(查询2,“复制字符(10)”;
strcat(查询2,“复制字符(20)”;
strcat(查询2,“CINSTAT字符(10)”;
strcat(查询2,“查找字符(1)”;
strcat(查询2,“LINKIN CHAR(10))”;
EXEC SQL EXECUTE IMMEDIATE:Query2;
//错误处理
if(sqlca.sqlcode==-601)
{
strcpy(查询2,“从QTEMP/p6subch中删除”);
EXEC SQL EXECUTE IMMEDIATE:Query2;
}
execsqlcommit;
//Datalinks是一个向量,其中包含要插入QTEMP/P6SubCh表的所有筛选器数据
for(vector::iterator dl=Datalinks.begin();dl!=Datalinks.end();++dl)
{
EXEC SQL设置事务隔离级别不提交;
strcpy(查询3,“插入QTEMP/P6Subch(PAOPID,POPITPE)”;
strcat(查询3,“POPISTPE、POPIKNID、PINSTAT、PLEAFIND”);
strcat(第3项问题,“氯吡格雷、复印机、复印机、复印机、辛斯塔特”);
strcat(查询3,“克列芬,林肯)”;
strcat(查询3,“值(”);
strcat(查询3,(*dl)->父操作项ID);
strcat(查询3,“,”);
strcat(Query3,(*dl)->ParentOperationsItemType);
strcat(查询3,“,”);
strcat(Query3,(*dl)->ParentOperationsItemSubType);
strcat(查询3,“,”);
strcat(查询3,(*dl)->ParentKnownbyId);
strcat(查询3,“,”);
strcat(查询3,(*dl)->家长状态);
strcat(查询3,“,”);
追加字符(查询3,(*dl)->parentleaftindicator);
strcat(查询3,“,”);
strcat(查询3,(*dl)->ChildOperationsItemId);
strcat(查询3,“,”);
strcat(查询3,(*dl)->子操作项类型);
strcat(查询3,“,”);
strcat(查询3,(*dl)->子操作项子类型);
strcat(查询3,“,”);
strcat(查询3,(*dl)->ChildKnownbyId);
strcat(查询3,“,”);
strcat(查询3,(*dl)->ChildInternalStatus);
strcat(查询3,“,”);
追加字符(Query3,(*dl)->childleaftindicator);
strcat(查询3,“,”);
strcat(查询3,(*dl)->LinkInternalStatus);
strcat(查询3,“)”;
EXEC SQL EXECUTE IMMEDIATE:Query3;
execsqlcommit;
}
};

好的,我解决了这个问题,我只是添加了
EXEC-SQL-SET事务隔离级别NO-COMMIT之前,我调用了strcpy(Query2,“从QTEMP/p6subch中删除”)查询

这是我的全部代码:

void LinkRepository::SaveResultsToTable(InputParameters inputParameters)
{
    EXEC SQL INCLUDE SQLCA;
    EXEC SQL BEGIN DECLARE SECTION;
    char Query2[2000] = { "" };
    char Query3[2000] = { "" };

    EXEC SQL END DECLARE SECTION;

    strcpy(Query2, "CREATE TABLE QTEMP/P6SUBFCH");
    strcat(Query2, " (PAOPIID CHAR(21) NOT NULL,");
    strcat(Query2, " POPITPE CHAR(10),");
    strcat(Query2, " POPISTPE CHAR(10),");
    strcat(Query2, " POPIKNID CHAR(20),");
    strcat(Query2, " PINSTAT CHAR(10),");
    strcat(Query2, " PLEAFIND CHAR(1),");
    strcat(Query2, " CLOPIID CHAR(21),");
    strcat(Query2, " COPITPE CHAR(10),");
    strcat(Query2, " COPISTPE CHAR(10),");
    strcat(Query2, " COPIKNID CHAR(20),");
    strcat(Query2, " CINSTAT CHAR(10),");
    strcat(Query2, " CLEAFIND CHAR(1),");
    strcat(Query2, " LINKIN CHAR(10))");

    EXEC SQL EXECUTE IMMEDIATE :Query2;

    // Error handling
    if (sqlca.sqlcode == -601)
    {
         EXEC SQL SET TRANSACTION ISOLATION LEVEL NO COMMIT;

         strcpy(Query2, "DELETE FROM QTEMP/P6SUBFCH");

         EXEC SQL EXECUTE IMMEDIATE :Query2;

    }

    EXEC SQL COMMIT;

    // Datalinks is a vector that has all the filter data to insert into the QTEMP/P6SUBFCH table
    for(vector<Datalink*>::iterator dl = Datalinks.begin(); dl != Datalinks.end(); ++dl)
    {
         EXEC SQL SET TRANSACTION ISOLATION LEVEL NO COMMIT;

         strcpy(Query3, "INSERT INTO QTEMP/P6SUBFCH (PAOPIID,POPITPE,");
         strcat(Query3, "POPISTPE,POPIKNID,PINSTAT,PLEAFIND,");
         strcat(Query3, "CLOPIID,COPITPE,COPISTPE,COPIKNID,CINSTAT,");
         strcat(Query3, "CLEAFIND,LINKIN)");
         strcat(Query3, "VALUES('");
         strcat(Query3, (*dl)->ParentOperationsItemId);
         strcat(Query3, "','");
         strcat(Query3, (*dl)->ParentOperationsItemType);
         strcat(Query3, "','");
         strcat(Query3, (*dl)->ParentOperationsItemSubType);
         strcat(Query3, "','");
         strcat(Query3, (*dl)->ParentKnownbyId);
         strcat(Query3, "','");
         strcat(Query3, (*dl)->ParentInternalStatus);
         strcat(Query3, "','");
         append_char(Query3, (*dl)->ParentLeafIndicator);
         strcat(Query3, "','");
         strcat(Query3, (*dl)->ChildOperationsItemId);
         strcat(Query3, "','");
         strcat(Query3, (*dl)->ChildOperationsItemType);
         strcat(Query3, "','");
         strcat(Query3, (*dl)->ChildOperationsItemSubType);
         strcat(Query3, "','");
         strcat(Query3, (*dl)->ChildKnownbyId);
         strcat(Query3, "','");
         strcat(Query3, (*dl)->ChildInternalStatus);
         strcat(Query3, "','");
         append_char(Query3, (*dl)->ChildLeafIndicator);
         strcat(Query3, "','");
         strcat(Query3, (*dl)->LinkInternalStatus);
         strcat(Query3, "')");

         EXEC SQL EXECUTE IMMEDIATE :Query3;

         EXEC SQL COMMIT;
    }
};
void LinkRepository::SaveResultsToTable(InputParameters InputParameters)
{
execsql包括SQLCA;
execsqlbegindeclare部分;
字符查询2[2000]={''};
字符查询3[2000]={''};
execsqlend声明部分;
strcpy(查询2,“创建表QTEMP/p6subch”);
strcat(Query2),(paopid字符(21)不为空,”;
strcat(查询2,“POPITPE字符(10)”;
strcat(查询2,“POPISTPE字符(10)”;
strcat(查询2,“POPIKNID字符(20)”;
strcat(查询2,“PINSTAT字符(10)”;
strcat(查询2,“PLEAFIND CHAR(1)”;
strcat(查询2,“氯吡咯字符(21)”;
strcat(查询2,“复制字符(10)”;
strcat(查询2,“复制字符(10)”;
strcat(查询2,“复制字符(20)”;
strcat(查询2,“CINSTAT字符(10)”;
strcat(查询2,“查找字符(1)”;
strcat(查询2,“LINKIN CHAR(10))”;
EXEC SQL EXECUTE IMMEDIATE:Query2;
//错误处理
if(sqlca.sqlcode==-601)
{
EXEC SQL设置事务隔离级别不提交;
strcpy(查询2,“从QTEMP/p6subch中删除”);
EXEC SQL EXECUTE IMMEDIATE:Query2;
}
execsqlcommit;
//Datalinks是一个向量,其中包含要插入QTEMP/P6SubCh表的所有筛选器数据
for(vector::iterator dl=Datalinks.begin();dl!=Datalinks.end();++dl)
{
EXEC SQL设置事务隔离级别不提交;
strcpy(查询3,“插入QTEMP/P6Subch(PAOPID,POPITPE)”;
strcat(查询3,“POPISTPE、POPIKNID、PINSTAT、PLEAFIND”);
strcat(第3项问题,“氯吡格雷、复印机、复印机、复印机、辛斯塔特”);
strcat(查询3,“克列芬,林肯)”;
strcat(查询3,“值(”);