【问题标题】:Creat Table as Select is changing some data typesCreate Table as Select 正在更改某些数据类型
【发布时间】:2019-12-11 22:48:06
【问题描述】:

我正在通过从另一个表中进行选择来创建一个表。我的理解是,通过这样做,创建的列应该与原始源具有相同的数据类型。这不是几个专栏的情况,它让我发疯。特别是两列。一个是 Varchar2(4),另一个是 Varchar2(1),但在创建的表中它们都变成了 Varchar2(100)。有没有应该发生这种情况的情况?

我的选择查询相当复杂,因为有 20 个联合,但它们都来自同一个表。还有 28 列,所以我宁愿做这项工作,也不愿分两步创建表并填充它。

已知工会会搞砸这种脚本吗?

【问题讨论】:

  • VARCHAR2(100) 不是任意的。我敢打赌,您的各种联合中的字段之一是 VARCHAR2(100),Oracle 正在根据最大大小创建新表。不过,我不能肯定地说,至少没有看到您的 select 语句的相关部分。

标签: sql oracle union create-table sqldatatypes


【解决方案1】:

我了解一次性创建和填写表格的偏好。除了现在更容易,如果有任何修改也会更容易。但是,在某些时候,您可能会认为您要花费更多时间来尝试解决此问题,然后才需要编写 create table 语句。 (您可以让数据库从现有版本中为您执行此操作)。

至于这样做的原因,我建议您的一个工会将 concat 或其他功能应用于该领域。如果您发现有问题的列,那么您可以强制转换它以确保按照您的意图看到表格。

如果您找不到 20 个 select 语句中的哪一个是有问题的,则删除一半,看看它是否按照您想要的方式创建列。然后继续将联合分成两半,直到您确定导致这种情况的 select 语句。注意:可能不止一个。

【讨论】:

    【解决方案2】:

    我发现你们都非常接近正确的问题。后来的工会之一将变量转换为

    CAST(NULL AS VARCHAR2(100))

    没有想到 NULL 值会增加数据类型的大小,但我想这是有道理的。

    【讨论】:

      猜你喜欢
      • 2013-12-27
      • 2013-06-29
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      相关资源
      最近更新 更多