我收到以下错误:AeSymResolve 语句 [775] ...语句 (108,512) 中位置 34338 处或附近的元 SQL 错误。SQL 语句本身超过 40,000 个字符长,因此产生了问题。

数据库是oracle。在工具 8.49.24 上运行。

有帮助吗?

解决方案

有没有这样的限制。

您可以通过创建像SQL证实了这一点自己:

select 'x' from PS_INSTALLATION where 
      1 = 1 and 
      1 = 1 and
      1 = 1 and
      1 = 1 and
      /* ... copy paste '1 = 1 and' 90000 times or so times more */
      1 = 1

虽然这让p侧相当缓慢,这保存和验证就好了。

其他提示

我知道有关于在应用引擎(SQL步骤)中使用的SQL的大小的限制。我曾经收到了类似的错误,而试图用一个非常长的SQL中的应用程序引擎。

如果该相同的限制适用于SQL对象我不会感到惊讶。

要解决这个问题,我能够在SQL分成2(状态更新语句)。希望你的情况是可能的。

有内的PeopleCode限制,这主要是由于在字符串长度的限制,但是我从来没有发现存储的SQL语句的限制。

就我个人而言,我会考虑以某种方式将声明分成几部分。

你可以:

  • 使用 App Engine 的内置循环机制
  • 混合使用 SQL 和 PeopleCode
  • 使用临时表并执行中间SQL,存储在临时表中

除了让你的数据库心脏病发作之外,更不用说当 DBA 在 SQL 监视器中看到该语句时提及。如果您必须再次查看该声明,您就会为自己节省一个痛苦的世界。

我认为 App Engine 中的 SQL 是以长整型存储的,因此在 Oracle 下它会是 4GB,在 DB2 下也同样巨大。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top