2017-08-16 85 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)。

升级到当前版本是明智的事情。