【问题标题】:Fill in the NOT NULL columns of a table while using the INSERT INTO statement在使用 INSERT INTO 语句时填写表的 NOT NULL 列
【发布时间】:2017-02-26 23:33:03
【问题描述】:

我正在解决一个问题,我需要使用 select 语句将 135 行插入到最近创建的表中。我对该表有一些 NOT NULL 约束,我不明白如何更改我的 SELECT 以插入正确的信息。

这就是我想要做的:

CREATE SEQUENCE target_table_s1 START WITH 1001;

INSERT INTO target_table(colA,ColB,ColC,ColD,ColE)
target_table_s1.NEXTVAL,
(SELECT (colB,colC,ColD)
FROM source_table),
colE;

其中 colA 是一个序列号(为 target_table 提供主键),而 colE 基本上只需要像 SYSDATE 这样简单的东西。

对我如何使这项工作有任何建议?我知道我上面写的内容不会起作用,但这是我可以说明我正在努力完成的事情的最佳方式。我是否需要找到一种方法将我的序列放入 select 语句中,使其遵循正确的“INSERT INTO SELECT”格式?

【问题讨论】:

    标签: oracle select insert sqlplus


    【解决方案1】:

    我认为你应该在这里使用INSERT INTO ... SELECT 构造:

    INSERT INTO target_table (colA,ColB,ColC,ColD,ColE)
    SELECT target_table_s1.NEXTVAL, ColB, ColC, ColD, SYSDATE
    FROM source_table
    

    我假设您想将SYSDATE 插入到 E 列中。

    【讨论】:

    • 所以这就是我正在寻找的东西,我几乎解决了我的问题。也许你能帮我做最后一点。这是我的新背景:
    • 插入到 target_table(colA, colB, colC, colD, colE)
    • SELECT seq.NEXTVAL, f.colB, f.colC, f.colD, SYSDATE FROM (SELECT colB, colC, colD FROM source_table);如何将源表别名为 f?我只使用“FROM source_table f”吗?如果 from 语句涉及多个表怎么办? (对不起,我的 cmets 还没写完就继续提交)
    • 是的,如果你想给source_table起别名,那么使用FROM source_table AS f
    • 这在我的实际代码中非常有效。接受的答案。
    猜你喜欢
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 2015-02-21
    相关资源
    最近更新 更多