在 C 中嵌入 SQL ,有没有办法使 table name 变量?

Embedded SQL in C , is there a way making table name variable?

我有超过 10,000,000 行需要插入一个 table。考虑到行数较多,想先把大的table拆分成100个小的table,然后从table_001插入到table_100。我希望这样做:

int main(){
    int i = 0;
    int j = 0;
    int k = 0;
EXEC SQL BEGIN DECLARE SECTION;
    char *buff[100] = { 0 };
EXEC SQL END DECLARE SECTION:


    while( i < 100 ){
        buff[i] = malloc(12);
        sprintf(buff[i],"table_%3.3d",i+1);
        i++;
    }

    i = 0;
    while( i < 10000000 ){
        EXEC SQL INSERT INTO :buff[j] VALUES(:v1,:v2);/* v1 and v2 is not important here, so I eliminate the code generate the v1 and v2 */    
        k++;
        if( 1000000 == k ){
            k = 0;
            j++;
        }
    }

    return 0;
}

但是table这个名字好像不能变,有没有类似的方法呢?或者有没有其他好的方法来处理嵌入式 SQL 中的大 table?

对于变量 table 名称,您需要 PREPAREEXECUTE 动态 SQL 语句,其中您 CONCAT table name 写入语句。

通常动态 SQL 构建串联文本是一个坏主意,因为它对 SQL 注入开放。但是,由于您不是在处理来自用户的输入,而且这是处理变量 tablename 的唯一方法,所以您应该没问题。

但我认为先将 1000 万行插入 100 个较小的 tables,然后再从较小的 tables 插入主行没有任何好处。

直接插入最后一个即可table;每 1000 行左右提交一次;因为您可能不希望在一次提交中有 1000 万行。

您没有提及您使用的 DB2 平台和版本,可能有可用的批量加载过程作为替代方法。