【问题标题】:I am getting this error "ERROR: Teradata row not delivered (trget): Numeric overflow occurred during computation"我收到此错误“错误:未交付 Teradata 行(trget):计算期间发生数字溢出”
【发布时间】:2015-09-15 11:19:38
【问题描述】:

在 proc sql (SAS) 中执行 teradata 查询时,出现此错误

错误:未交付 Teradata 行 (trget):发生数值溢出 在计算期间。

我正在使用 SAS EG 9.3。 我尝试增加假脱机空间并尝试使用mode=teradat

查询很大,有很多 sum、max 和 count 函数。 谁能告诉我如何解决这个问题?

【问题讨论】:

  • 您能分享一下失败的 SQL 语句和部分 SAS 程序吗?

标签: sas teradata


【解决方案1】:

绝对不是MAXMIN,也可能不是COUNT 导致该错误,因为这在Teradata 模式下返回INTEGER,在ANSI 模式下返回DECIMAL(15)

整数相乘或求和可能会导致溢出。

如果系统的 MaxDecimal 设置不同于 38,则 DECIMAL 也是如此。运行 SELECT TYPE(10000000000. * 10000000000.); 并检查它是否返回小于 DECIMAL(22,0)

要修复此错误,您必须将第一个操作数转换为更高精度的 DECIMAL(或者在 TD14 中更好的 NUMBER(*)),但是当您将数据返回到 SAS 时,您可以简单地使用 FLOAT,因为这是 SAS 中的本机数字类型:

CAST(colA AS FLOAT) * colB

SUM(CAST(colA AS FLOAT))

【讨论】:

  • 感谢您的回复,我一定会尝试并让您知道...但是,我有一个问题,就像我在我的代码中使用了太多的 SUM 函数,所以将它们全部转换, 你确定不会导致数据丢失吗??
  • 如果您使用的是 TD14,则可以改用 CAST(colA AS NUMBER)(精度为 38 位),但无论如何结果都会转换为 SAS 的 FLOAT(15 位)。跨度>
  • 感谢您的回复!!我尝试不使用 SUM 函数或不使用任何函数,我只是选择了一些列,但它不起作用。我遇到了同样的错误。
  • 如果没有实际的语句和表 DDL,很难分辨。
【解决方案2】:

如果您有太多的观察 COUNT 可能会导致溢出。使用 CAST(COUNT(*) as FLOAT)。

【讨论】:

    猜你喜欢
    • 2018-07-27
    • 2023-03-23
    • 1970-01-01
    • 2021-11-24
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多