Oracle:将select语句结果集导出为类似于SQL开发人员导出的INSERT SQL语句

时间:2016-07-26 14:07:07

标签: oracle plsql oracle-sqldeveloper oracle12c

我正在寻找一种解决方案来为select语句结果集创建SQL INSERT语句使用PL / SQL脚本。寻找SQL Developer工具中可用的类似功能(export - > format insert),但我想将解决方案作为脚本而不是使用任何工具。

我已经提到了以下解决方案。但是,我想知道是否有更好的方法来解决这个问题,因为解决方案很旧而且不是很简单。

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

5 个答案:

答案 0 :(得分:5)

我刚刚为我的问题找到了一个简单的解决方案使用oracle提示(“插入”)。这也会自动处理数据类型。我的表只有字符串和数字数据类型,所以它对我来说很好。我没有测试其他数据类型的解决方案。但是,我希望它也适用于其他数据类型。

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

答案 1 :(得分:4)

作为你说的脚本......

使用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

答案 2 :(得分: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均为NUMBER,其余为CHAR或VARCHAR2

答案 3 :(得分:0)

set sqlformat insert

在我的情况下,最初它在SQL Developer中不起作用,因为该版本为3.2版,并在脚本输出中显示了消息:

  

oracle未知设置选项sqlformat插入

当我升级到 SQL Developer 4.2及更高版本并使用“运行脚本”(F5)时,我能够将选择记录导出为插入脚本。

答案 4 :(得分:0)

您可以根据需要使用for循环和dbms输出来做到这一点,即使像Toad这样的合并语句,也只需使缓冲区足够大即可:

BEGIN
   FOR r_cur IN (  SELECT column_one,
                          column_two,
                          column_three,
                          column_value
                     FROM some_table
                    WHERE column_one LIKE 'something%'
                 ORDER BY column_one, column_two, column_three)
   LOOP
      DBMS_OUTPUT.put_line (
            'MERGE INTO some_table A USING
 (SELECT\n
  ''' || r_cur.column_one || ''' as column_one,
  ''' || r_cur.column_two || ''' as column_two,
  ''' || r_cur.column_three || ''' as column_three,
  ''' || r_cur.column_value || ''' as column_value
  FROM DUAL) B
ON (A.column_one = B.column_one and A.column_two = B.column_two and A.column_three = B.column_three)
WHEN NOT MATCHED THEN 
INSERT (
  column_one, column_two, column_three, column_value)
VALUES (
  B.column_one, B.column_two, B.column_three, B.column_value)
WHEN MATCHED THEN
UPDATE SET 
  A.column_value = B.column_value;
'         );
   END LOOP;
END;
/