2016-07-26 357 views
0

我正在寻找一种解决方案来为select语句结果集使用PL/SQL脚本创建SQL INSERT语句。寻找SQL Developer工具中可用的类似功能(导出 - >格式插入),但我希望解决方案作为脚本而不是使用任何工具。Oracle:将select语句结果集导出为INSERT SQL与SQL开发人员导出的语句类似

我提到了下面的解决方案。但是,我想知道作为解决方案的更好方法是否过时并不是很简单。

EXPORT AS INSERT STATEMENTS: But in SQL Plus the line overrides 2500 characters!

回答

0

我才发现我的问题使用Oracle提示一个简单的解决方案( “插入”)。这也会自动处理数据类型。我的表只有字符串和数字数据类型,所以它对我来说工作正常。我还没有测试其他数据类型的解决方案。但是,我希望它也适用于其他数据类型。

set linesize 2000 
set pagesize 10 
spool "c:\myoutput.txt"; 
select /*insert*/ * from SAMPLE_TABLE; 
spool off; 
+0

该工作的工具是什么? –

0

不是真的PL/SQL,但基本的SQL可以处理这样简单的要求:

set linesize 2000 
set pagesize 0 
spool c:\myoutput.txt 
select 'INSERT INTO SAMPLE_TABLE VALUES ('''|| 
    C01||''','||C02||','||C03||','||C04||','''||C05||''','''|| 
    C06||''','''||C07||''','||C08||','||C09||','''||C10||''','''|| 
    C10||''','''||C11||''','''||C12||''','''||C13||''','''||C14||''','''|| 
    C15||''','''||C16||''');' 
from sample_table; 
spool off 

注:这是通过使用从URL您在您的文章中引用的表例子。在URL中的例子,C02,C03,C04,C08,C09和全数字,其余的都是CHAR或VARCHAR2

+0

谢谢!实际上,脚本不考虑数据类型。 – notionquest

+0

我不明白你的意思。你需要考虑数据类型吗?假设源表和目标表中的DDL都相同,那么数据类型不应该成为问题,因为表的源副本中的所有字段已经满足必要的约束。我可能完全读错了,请原谅我,如果是这样的话! – fleetmack

+0

示例:如果列中的字符串值包含空格,则插入脚本不会用单引号引起来。 – notionquest

2

像你说的脚本...

使用SQLcl - 这是一个命令 - SQL Developer的在线界面。

您可以创建一个.bat或.sh脚本来启动SQLcl,运行您的查询,将其假脱机至文件,无需编写任何代码。

set pagesize... 
set head... 
set feedback... 
spool... 

set sqlformat insert 
select * from sample_table; 
spool off 
exit 

uses the same code as SQL Developer to generate the INSERTs, only avail from a CLI/script