2013-10-22 38 views
0

我試圖從select語句中插入一些數據到表中。我知道我能做到這一點是這樣的:Oracle SQL,在單獨的選擇查詢中使用序列

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 

但我仍然不能得到它的工作。有人可以告訴我,我想要做什麼是可能的嗎?我想要做的就是使用選擇查詢 在另一個架構上運行插入語句。

+0

它總是有幫助的指定你做了什麼錯誤,而不是希望我們能正確猜出。你是說'logseq'是一個由你正在運行'INSERT'語句的用戶擁有的序列嗎?您的用戶是否有權使用序列?如果是這樣,除非要爲序列創建同義詞,否則需要一個完全限定的對象名稱。 –

+0

它應該工作。你會得到什麼錯誤。序列不是來自任何表格。它是一個獨立的對象。 –

+0

該錯誤表示「序列號不允許在這裏」,但是我重寫了該查詢並從頭開始工作。我想我在這裏輸入的內容與我運行的內容不匹配,所以我很抱歉 – myworkaccount

回答

0

您所查詢的是正確的,如下圖所示:

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 

什麼錯誤消息,你到底得到什麼?

+0

我記下了以下錯誤:「序列號不允許在這裏」,但我決定從頭開始重新編寫查詢並且它工作正常。我想我的語法不符合我在這裏輸入的內容,我很抱歉 – myworkaccount

1

查詢 INSERT INTO new_logs(idLog,logEntry) (選擇LOGSEQ.NEXTVAL,logEntry從old_logs)如果u有old_logs重複logentry場可能會給錯誤。

試試這個: -

insert into new_logs (idLog, logEntry) 
select LOGSEQ.NEXTVAL, logEntry from (select distinct logEntry from old_logs);