gpt4 book ai didi

sql - SQL创建表在列使用%type

转载 作者:行者123 更新时间:2023-12-04 16:31:45 25 4
gpt4 key购买 nike

我正在尝试创建一个表的备份表(在函数中),

CREATE TABLE TBTestBackup
(
colum1 user.TBTest.colum1%type,
colum2 user.TBTest.colum2%type,
colum3 user.TBTest.colum3%type
colum31 user.TBTest.colum3%type, --new column with same type as colum3
colum4 user.TBTest2.column15type, --column from other table
colum4 CHAR (12 BYTE), --new column with fixed type
) TABLESPACE user_DATA

但我红色这行不通,
现在我的问题是我如何才能使它尽可能地动态,所以我不必在每次更改数据类型时都在备份脚本中更新数据类型,例如从:
VARCHAR2(24 CHAR)VARCHAR2(50 CHAR)
(表列是固定的,它们不会更改)
这种情况通常不会发生,但是我们不得不做几次,因为该字段不足以提供特定值,因此没有人更新备份表,并且id给出了一些错误。

编辑:我忘记了一些必要的东西:
  • 我必须添加2个不在原始表中的列,但应与已经存在的表之一具有相同的数据类型。
    我可以使用select作为,这样它将具有相同的类型但又是另一个名称?
    如果是,我该怎么做?
  • 和其他表中的某些字段(因此我必须使用联接)

  • 和:
  • 来自多个表的多列类型
  • 固定类型为
  • 的新列
  • 来自表ABC
  • 的具有变量类型的新列,例如列XY

    最佳答案

    根据更新的要求,基于以下两个表中的类型创建一个表:

    create table t1 (col1 number, col2 varchar2(2), col3 date);
    create table t2 (col1 varchar2(10 char));

    您可以将它们连接在一起,并使用一个过滤器,该过滤器始终会评估为false,如Orangecrush所建议的那样:
    create table tb tablespace users as
    select t1.col1 as col1, t1.col2 as col2, t1.col3 as col3,
    t1.col3 as col4, t2.col1 as col5, cast(null as varchar2(12 byte)) as col6
    from t1
    cross join t2
    where null is not null;

    通常, cross join是不受欢迎的,但是优化器足够聪明,可以意识到过滤器意味着它根本不需要实际击中表格。当然,如果有可以联接的字段,则可以使用普通的内部联接。
    desc tb

    Name Null Type
    ---- ---- -----------------
    COL1 NUMBER
    COL2 VARCHAR2(2)
    COL3 DATE
    COL4 DATE -- new column with same type as t1.col3
    COL5 VARCHAR2(10 CHAR) -- column from other table
    COL6 VARCHAR2(12) -- new column with fixed type

    关于sql - SQL创建表在列使用%type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14646561/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com