我试图从select语句中将一些数据插入到表中。我知道我可以这样做:
insert into new_logs (idLog, logEntry)
(select idLog, logEntry from old_logs)但是,当我需要传递一个序列值时,在尝试执行这种类型的查询时遇到了一个问题:
insert into new_logs (idLog, logEntry)
(select LOGSEQ.NEXTVAL, logEntry from old_logs) 我认为问题在于序列来自对偶表,但上面的查询意味着它来自old_logs表。
我也试过这个,
insert into new_logs (idLog, logEntry)
select next_value for LOGSEQ, logEntry from old_logs但我还是不能让它起作用。有人能告诉我我想做的事是否可能吗?我要做的就是使用select查询和另一个模式上的序列运行insert语句。
发布于 2013-10-22 16:10:04
您的查询是正确的,如下所示:
SQL> CREATE TABLE old_logs AS
2 SELECT ROWNUM idLog, 'a' logEntry FROM dual CONNECT BY LEVEL <= 10;
Table created
SQL> CREATE TABLE new_logs AS
2 SELECT * FROM old_logs WHERE 1 = 2;
Table created
SQL> CREATE SEQUENCE logseq;
Sequence created
SQL> INSERT INTO new_logs (idLog, logEntry)
2 (SELECT LOGSEQ.NEXTVAL, logEntry FROM old_logs);
10 rows inserted你到底收到了什么错误信息?
发布于 2013-10-23 11:51:52
您的查询插入到new_logs (idLog,logEntry) (从old_logs中选择LOGSEQ.NEXTVAL、logEntry )可能会导致错误,如果您在old_logs中有重复的登录字段。
试试这个:-
insert into new_logs (idLog, logEntry)
select LOGSEQ.NEXTVAL, logEntry from (select distinct logEntry from old_logs);https://stackoverflow.com/questions/19522863
复制相似问题