set pagesize 0; set linesize 100; spool c:\data.sql select 'insert into tblinfo values ('''||FID||''','''||FNAME||''','||nvl(FAGE,0)');' from tblinfo; spool off;
bzszp(SongZip) 的方法不错误,但生成的c:\data.sql文件会产生很多的空格等,效果不好。最好的办法是利用pb连接,直接写select * from 表名。然后另存为(格式选择sql,文件名为新的表名就可以了)
set linesize 100;
spool c:\data.sql
select 'insert into tblinfo values
('''||FID||''','''||FNAME||''','||nvl(FAGE,0)');'
from tblinfo;
spool off;
>>set pagesize 0;
>>set linesize 100;
>>spool c:\data.sql
>>select 'insert into tblinfo values
>>('''||FID||''','''||FNAME||''','||nvl(FAGE,0)');'
>>from tblinfo;
>>spool off;
假设我事先只知道表名,不知道具体有哪些字段呢?
我想要的就是那些字段的名称是动态产生的。
如果你一定要用程序实现,我写了一个PERL程序,供参考提供一Perl程序 record2insert.pl
实施步骤
1、先到www.activeperl.com去下载一个activeperl,免费的
2、安装perl
3、到\Perl\bin下面执行 ppm
4、出现PPM提示符如下
D:\Perl\bin>PPM
PPM interactive shell (2.1.6) - type 'help' for available commands.
PPM>
5、在PPM提示符下执行如下命令,安装数据库连接模块DBI,DBD
PPM>install dbi
PPM>install dbd-oracle
6、执行下面的perl程序即可,其中用户名和密码,以及连接字符串自己改改
再命令窗口直接键入如下命令格式,该程序无需编译,祝你好运
record2insert.pl >输出文件名.sql
7、该程序不支持RAW,LONG和LOB类型的字段
#!/usr/bin/perl -w
#author atgc
use DBI;
$dbh = DBI->connect("DBI:Oracle:连接名",'用户名','密码');
$sql = "select table_name from user_tables";
$sth1 = $dbh->prepare($sql);
$sth1->execute();
while($table_name = $sth1->fetchrow)
{
$sql = "select * from $table_name";
$sth2 = $dbh->prepare($sql);
$sth2->execute();
while(@field = $sth2->fetchrow)
{
$value="";
foreach $ele(@field){$ele.="";$ele=~s/'/''/;$value.=$ele."','";}
$value=~s/\,\'$//;
print "insert into $table_name values ('"."$value\);\n";
}
print "\n";
$sth2->finish();
}
$sth1->finish();
$dbh->disconnect();
写一个pl/sql块,从col里面找到表的每个列,判断列的类型
组合出不同的语句。
生成select 脚本。
>>那就比较复杂了
>>写一个pl/sql块,从col里面找到表的每个列,判断列的类型
>>组合出不同的语句。
>>生成select 脚本。
===================
呵呵
就是比较复杂(对我来说是很复杂),我才到这里请教高手嘛:)
其实简单的我问之前就已经写好了:)