gpt4 book ai didi

c - C 中的嵌入式 SQL,有没有办法使表名可变?

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:08 24 4
gpt4 key购买 nike

我有超过 10,000,000 行需要插入到一个表中。考虑到行数较多,想先把大表拆分成100个小表,然后从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;
}

但是表名好像不能变,请问有类似的方法吗?或者有没有其他好的方法来处理嵌入式 SQL 中的大表?

最佳答案

对于可变表名,您需要PREPAREEXECUTE 动态SQL 语句,您在其中CONCAT 了表声明中的名称。

通常情况下,动态 SQL 构建的串联文本不是一个好主意,因为它对 SQL 注入(inject)开放。但是,由于您不是在处理来自用户的输入,而且这是处理变量表名的唯一方法,因此您应该没问题。

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

直接插入决赛 table ;每 1000 行左右提交一次;因为您可能不希望在一次提交中包含 1000 万行。

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

关于c - C 中的嵌入式 SQL,有没有办法使表名可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37681039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com