SQL创建空表并用信息填充一些行

时间:2016-03-30 10:24:19

标签: sql oracle create-table

是否可以创建一个具有固定行数(该数字在另一个表中定义)和已定义列(col1和col2)的空表,然后将此空表中的某些行替换为我得到的行从选择?

我希望最终结构如下:

col1        col2
----------------
empty       empty
val11       val21
val12       val22
empty       empty
val13       val23
empty       empty

我从另一个选择中取val11,val21 ....我希望这个空值的表只是本地的,而不是在其他任何地方创建它。

2 个答案:

答案 0 :(得分:3)

您可以使用空字段创建一个包含可变数字(例如5)行的表格; 关于排序,您不能使用任何内部排序,因此您需要添加一个字段来保存行的位置。 例如:

SQL> create table tab_5(id number, col1 varchar2(50), col2 varchar2(50))
  2  /

Table created.

SQL> insert into tab_5
  2  select level, null, null
  3  from dual
  4  connect by level <= 5
  5  /

5 rows created.


SQL> select * from tab_5 order by id;

        ID COL1                 COL2
---------- -------------------- --------------------
         1
         2
         3
         4
         5

如果您需要以隔行扫描的方式更新某些记录,则可以依赖您的身份

SQL> update tab_5
  2  set col1 = 'something',
  3      col2 = 'something else'
  4  where mod(id, 2) = 0;

2 rows updated.

SQL> select * from tab_5 order by id;

        ID COL1                 COL2
---------- -------------------- --------------------
         1
         2 something            something else
         3
         4 something            something else
         5

SQL>

答案 1 :(得分:2)

我没有看到将固定数量的空记录插入&#34;替换&#34;他们以后。相反,一个更好的想法是只需要INSERT你想要的记录,然后再添加一些空记录。

首先INSERT您希望从另一个表中获取的记录:

INSERT INTO yourTable (col1, col2)
SELECT col1, col2
FROM anotherTable

然后INSERT&#34;空&#34;记录:

INSERT ALL
INTO yourTable (col1, col2) VALUES (null, null)
INTO yourTable (col1, col2) VALUES (null, null)
INTO yourTable (col1, col2) VALUES (null, null)
...
SELECT 1 FROM DUAL;