2017-08-16 86 views
0

我有下面的選擇查詢,爲此查詢的結果我想創建插入腳本並將其保存在文件中。我已經使用線軸。在sql開發人員不工作的插入假脫機

set long 10000 
set lines 100000 
set sqlformat insert 
spool c:\temp\Insert_TEST_GRP.sql 
select ID,NAME,TEST_DATE from TEST_GRP sd 
where TEST_DATE = 
(select min(TEST_DATE) 
    from TEST_GRP sd2 
    where sd.ID = sd2.ID  
) 
and sd.TEST_DATE <> TO_DATE ('01.01.2000', 'dd.mm.yyyy'); 
spool off 

該文件已創建。但是當我查看文件時,我得到的結果不是插入語句的形式,因爲我想再次運行此插入語句。

下面怎麼樣了數據的模樣文件看起來不正確的格式: enter image description here

+0

也許向我們展示格式不正確的數據,以及您的期望? – OldProgrammer

+1

也可以提及您正在使用的SQL Developer版本,以及您如何查看假脫機文件。也許,如果你是一個非常舊的版本,你是否會遇到'set sqlformat insert'的錯誤? –

+0

謝謝亞歷克斯我明白這個問題是與我的SQL開發者版本。我運行的是舊版本,例如v3.0。但是,當我檢查現在在更高版本,它完美的作品 – Andrew

回答

2

我們無權訪問您的表格或您的數據。

但在這裏它正在與演示模式HR和員工表

set sqlformat insert 
spool c:\users\jdsmith\desktop\SO_inserts.sql 
select * from employees; 
spool off 

enter image description here

你使用長設置 - 不你的表有它LOBS?

另外,我注意到你問的OTN Forums同樣的問題...

+0

我已經刪除了設置長10000,設置行100000,但仍然沒有得到正確的格式的結果。我在我的問題中提到了我得到的結果 – Andrew

+0

沒有您的TEST_GRP表和數據,我們無法幫助您。 – thatjeffsmith

+0

可以請你告訴我你是如何在SQL開發人員運行它?我正在使用F5鍵運行它。我得到的結果,但結果格式不正確。 – Andrew

1

你需要返回一個字符串,它是你需要的列格式化的INSERT語句。例如

set long 10000 
set lines 100000 
set sqlformat insert 
spool c:\temp\Insert_TEST_GRP.sql 
select 'INSERT INTO TEST_GRP (ID,NAME,TEST_DATE) VALUES (' || 
    ID||','||NAME||',' || TEST_DATE||');' 
from TEST_GRP sd 

where TEST_DATE = 
(select min(TEST_DATE) 
    from TEST_GRP sd2 
    where sd.ID = sd2.ID  
) 
and sd.TEST_DATE <> TO_DATE ('01.01.2000', 'dd.mm.yyyy'); 
spool off 

如果您正在使用的SQLDeveloper,那麼你可以使用內置的導出功能和導出結果網格,嵌件。

+0

'set sqlformat插入'應該意味着你不需要手動構建插入語句。 (如果你這樣做,你需要考慮在字符串周圍添加單引號和雙引號,日期格式等) –

+0

感謝它的工作,但是當我查看插入語句並嘗試運行它時,我得到錯誤爲SQL錯誤: ORA-00917:缺少逗號。日期列和值字段中的字符串不被視爲字符串,但與數字格式類似,17-JAN-17 12.00.00。我怎樣才能讓它字符串? – Andrew

2

set sqlformat方法格式化您的查詢結果was added in version 4.1

如果您使用的是早期版本(例如3.0,如您在評論中所說),那麼它會抱怨,您似乎忽略了這一點;例如在4.0:

set sqlformat insert 

獲取此腳本輸出窗口:

line 1: SQLPLUS Command Skipped: set sqlformat insert 

/*insert*/方法是可早於:

select /*insert*/ * from dual; 

它得到

REM INSERTING into dual 
SET DEFINE OFF; 
Insert into "dual" (DUMMY) values ('X'); 

(別 當然真的試圖插入dual)。你也可以使用導出嚮導(tools-> database export);或者使用control-enter運行您的查詢,右鍵單擊輸出網格並選擇「導出」(雖然it may repeat the query)。

升級到當前版本是明智的事情。