【问题标题】:What is the Datatype of table generated at runtime运行时生成的表的数据类型是什么
【发布时间】:2015-07-05 15:34:11
【问题描述】:

下面是我的查询的样子

SELECT * FROM (SELECT * FROM table1 t1 WHERE col3='abc')
INNER JOIN table2 t2 ON t1.col1=t2.col1
INNER JOIN table3 t3 ON t2.col1=t3.col1

table1、table2、table3中所有列的数据类型都是varchar。

我假设在执行查询时,首先将 table1 存储在内存中,然后根据条件进行连接操作。

当 table1 存储在内存中时,列的数据类型是否仍然与表定义中的相同?因为如果数据类型改变了加入条件,它可能会抛出一些错误。

我的这个查询实际上是一个视图,我收到以下错误。 1. 在其上运行 RUNSTATS 时:

该实用程序无法生成统计信息。错误“-420”是 返回.. SQLCODE=-2310, SQLSTATE= , DRIVER=3.61.75

  1. 在运行此查询时不使用其视图名称(我的意思是直接运行查询) [jcc][t4][1026][11213][3.61.75] 由于内部 JCC 错误而引发的错误检查异常。请联系支持。

消息文本:服务器发生错误。严重性代码 8。无异常 从服务器返回的代码。 ERRORCODE=-4228, SQLSTATE=null

  1. 在运行查询时SELECT * from view;

在函数的字符串参数中发现无效字符 "DECFLOAT".. SQLCODE=-420, SQLSTATE=22018, DRIVER=3.61.75

我正在使用 db2 LUW 9.5

【问题讨论】:

  • 试试这个:(SELECT * FROM table1 t1 WHERE col3='abc') t1
  • 这可能是一个愚蠢的问题,但您是否检查过函数 DECFLOAT 是否存在字符串参数中的无效字符?
  • 您不能假设“...首先 table1 将存储在内存中...”。 SQL 优化器决定实际的执行顺序。
  • @ChristianBarron 我没有在任何地方使用过任何 DECFLOAT 函数

标签: sql db2


【解决方案1】:

我的实际查询没有 SELECT * 。它包含基于 CASE 的表达式。 因此,在 THEN 部分中,数据类型与 ELSE 部分不同。 示例:CASE WHEN 'a' THEN 'hello' ELSE 0

因此我遇到了错误,我将其他部分更改为“0”

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2011-06-30
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多