【问题标题】:What is the maximum NUM_OF_PARAMS in Perl DBI placeholdersPerl DBI 占位符中的最大 NUM_OF_PARAMS 是多少
【发布时间】:2011-11-12 01:16:17
【问题描述】:

单个语句中允许的最大占位符数量是多少? IE。属性NUM_OF_PARAMS.的上限

我遇到了奇怪的问题,我尝试调整插入的多行的最大数量,即将数量设置为 20,000 时出现错误,因为 $sth->{NUM_OF_PARAMS} 变为负数。

将最大插入次数减少到 5000 个效果很好。

谢谢。

【问题讨论】:

  • 不知道我的问题是否正确,但如果您需要知道它的价值,那么为什么不“打印 $sth->{NUM_OF_PARAMS};” ?
  • @ArunMu:我的问题,换句话说,DBI 接受的占位符(?)的数量是否有限制?例如,我可以在单个查询中传递 10000 个问号吗?
  • 我没有看到 DBI 在其源代码中施加的任何限制。如果您发现存在限制的情况,则很可能您的数据库的 DBD 遇到了限制。
  • @Ven'Tatsu:你说得对,它似乎来自 DBD::DB2 -- 我仍然不明白为什么......

标签: perl dbi dbd


【解决方案1】:

据我所知,DBI 的唯一限制是该值被放入 Perl 标量中,因此它可以保存在其中。但是,对于 DBD,情况完全不同。我怀疑很多,如果有数据库支持 20000 个参数。顺便说一句,NUM_OF_PARAMS 是只读的,所以我不知道“将数字设置为 20,000”是什么意思。我想你的意思是你创建一个带有 20000 个参数的 SQL 语句,然后读取 NUM_OF_PARAMS 并且它给你一个负值。如果是后者,我建议您在 rt.cpan.org 上报告(通过示例),因为它听起来根本不对。

我无法想象创建具有 20000 个参数的 SQL 语句在任何数据库中都会非常有效。如果可以的话,最好尝试将其减少到一个范围或类似的范围。在 ODBC 中,20000 个参数意味着 20000 个 IPD 和 APD,它们是相当大的结构。由于 DB2 cli 库与 ODBC 非常相似,我想您会消耗大量内存。

【讨论】:

    【解决方案2】:

    鉴于 20,000 会导致负面问题,而 5,000 不会导致负面问题,系统中有一个有符号的 16 位整数,因此上限约为 16383。

    但是,该限制取决于底层 DBMS 和 DBD 模块用于 DBMS 的 API(可能还有 DBD 代码本身);它不受 DBI 影响。

    您确定这是解决问题的最佳方式吗?

    【讨论】:

      猜你喜欢
      • 2015-08-07
      • 1970-01-01
      • 2010-12-24
      • 2017-05-20
      • 2012-12-22
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多