通过ODBC传递到Informix的脚本大小

问题描述 投票:0回答:1

我正在尝试确定通过ODBC传递给Informix的脚本的大小是否有限制。

我的Informix脚本大小将达到几兆字节(到INSERT表大约3.5K TEMP行,其格式为...

INSERT INTO table (field_1, field_2) VALUES (value_1, value_2)
INSERT INTO table (field_1, field_2) VALUES (value_1, value_2)
...
INSERT INTO table (field_1, field_2) VALUES (value_1, value_2)

...之后是根据现有表返回SELECT列表的部分...

SELECT 
    t1.field_1, 
    t1.field_2, 
    ...
    t1.field_n, 
    t2.field_2  
FROM 
    table_1 AS t1 
    INNER JOIN 
    temp_table_2 AS t2 
        ON  t1.field_1 = t2.field_1

脚本或内存表的大小是否受到限制?我估计(希望?)3.5K行(我们只看一两列)不会引起问题,也不会以不利的方式影响服务器(很容易有足够的内存)。请注意,我唯一的通信方法是通过ODBC,这是一个专有数据库-我无法在服务器上创建实际的数据表。

我问的原因是,以前,我生成了一个相当大的脚本,但是我没有将3.5k ID放入TEMP表(以及相关数据)中,而是使用了[C0 ]条件,仅查找ID(一旦找到记录,就可以进行处理)。但是,我不能确定是脚本编辑器(这是数据库的某种接口)笨拙地限制了IN条件,还是脚本本身的大小导致了问题,但基本上是脚本无法运行。之后,我们使用脚本,将其保存到文件夹中并尝试执行该脚本,并获得类似(但不相同)的结果(对不起-我没有任何一个进程的错误消息-不久前已完成) 。

对此领域中任何面向Informix的技巧,我们将不胜感激! :o)

sql-insert informix temp-tables
1个回答
0
投票

您正在使用哪个版本的Informix?假设它是12.10或14.10,那么对一组语句的大小没有具体限制,但是像您所提议的那样对数据库服务器的残酷和不寻常的惩罚(肯定是在滥用服务器)。 >

也可能具有中等风险;您必须确保正确引用用户提供的任何数据,以避免出现IN问题。

您应该准备一个带有两个占位符值的INSERT语句:

Little Bobby Tables

然后您应该重复执行此操作,并提供不同的值。这比使服务器解析3,500个类似的语句更为有效。在ESQL / C中,您可以声明一个INSERT游标,该游标将缓冲值集,从而减少到服务器的往返行程,这也非常有价值。我不确定这是否是ODBC中的一个选项。可能不是。

至少,您应该尝试使用准备好的语句。向服务器发送3,500 x 60+字节= 210 KiB是可行的。但是,如果使用预处理语句并每次使用新参数重复执行,则向服务器发送的数据量会减少(但往返次数会增加)。并且避免了将值转换为字符串的安全风险。 (由于您尚未说明值的类型,因此不确定是否存在风险。如果它们是数字或日期和时间之类的内容,则风险很小。如果是字符串,则存在以下风险:相当可观-不可替代,但不可忽略。)

较旧的Informix版本在一组语句的大小上有较小的限制-64 KiB,在此之前为32 KiB。您不太可能使用足够老的版本来解决问题,但是规则已经随着时间而改变。

© www.soinside.com 2019 - 2024. All rights reserved.