我正在寻找一种解决方案来为select语句结果集创建SQL INSERT语句使用PL / SQL脚本。寻找SQL Developer工具中可用的类似功能(export - > format insert),但我想将解决方案作为脚本而不是使用任何工具。
我已经提到了以下解决方案。但是,我想知道是否有更好的方法来解决这个问题,因为解决方案很旧而且不是很简单。
EXPORT AS INSERT STATEMENTS: But in SQL Plus the line overrides 2500 characters!
答案 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
答案 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;
/