insert into tbname(....) select ....... from tbname2
解决方案 »
- 把 group by b,a中的“a”去掉,但我必须保留select a,b,sum(qty)中的“a”,怎么写这个sql
- 关于 oracle 另一个字符集的问题。。
- 请教,Oracle双循环问题
- 菜鸟求解,在pl/sql developer中的问题
- 这段SQL 在Oracle 下能正确运行吗?
- 出现ORA-00927:缺少等号的警告,请帮忙解决
- Oracle地址与IIS地址冲突,如何解决?
- 在csdn找到一个存储过程(lob的更新),但不知其参数含义?
- 如何用命令禁用数据表的外键?
- 求一个Oracle查询语句
- 简单问题。怎样将oracle中的date类型的值减去5分钟?
- 怎么样catch循环里面的异常,处理并继续执行?
table1
col1 col2 col3
-----------------------
aa bb cc
dd ee ff需要转变成
table2
newcol1
-----------------------------------------------------------------
insert into tabl1 (col1,col2,col3) values(aa,bb,cc)
insert into tabl1 (col1,col2,col3) values(dd,ee,ff)
select 'insert into table1(col1,col2,col3) values('
||col1||','||col2||','||col3||')' from table1;
||col1||','||col2||','||col3||')' from table1;
如果是字符类型两边加引号,如果是日期类型考虑用to_date函数。
我希望把它做的通用一点,我大概有50张表需要倒。最长的一张表有60多个的字段,还可能被修改,直接写的话...有点痛苦。
oracle有像sql server 里syscolumns这样的系统表吗?
declare @head varchar(2000)
declare @body varchar(2000)select @head = 'insert into ' + @tabname+'(',@body = ''
select @head = @head + a.name + ', ' ,@body = @body +
case when a.type in (63,50,55,62,56,60,63,52,122,48,37) then
' convert(varchar(10),' + a.name +')' +'+' +'''' +',' +''''+'+'
when a.type in (47,39) then
'''' +''''+''''+''''+ '+'+ a.name +'+' +'''' +''''+''''+'''' +'+' +'''' +',' +''''+'+'
when a.type in (61,58) then
'''' +''''+''''+''''+ '+'+ a.name +'+' +'''' +''''+''''+'''' +'+' +'''' +',' +''''+'+'
end
from dbo.syscolumns A
where a.id = object_id(@tabname)select @head = @head + ') values ('
select @body = 'select (' +''''+@head+''''+' +'+left(@body,len(@body) - 5) +''''+')'+''''+ ') as command from ' +@tabname --select @body--察看拼出来的sql语句
--exec (@body)--执行这个动态语句这个语句还有一点问题,就是对image等字段类型没有作判断,但不知道在oracle中如何实现?
insert into TEMP3(col1,col2,col3)
SELECT col1,col2,col3 FROM TEMP2;可是如果需要不同的表呢?如何取得字段列表?
不同的表之间有关联吧,如有可这样:
insert into TEMP4(COL1,COL2)
SELECT bookinfo2.BOOKNAME, authorinfo2.HOMETOWN
FROM bookinfo2 INNER JOIN authorinfo2
ON bookinfo2.AUTHORNAME = authorinfo2.AUTHORNAME;
比如
1、先建立空表
2、然后insert into 空表 select * from 旧表;
当然,不能有RAW,LONG,LOB类型的字段还有,你说的应该是希望把表里面的记录写成insert语句吧?
比如
SQL> select * from aa;NAME DD
-------- ----------
1 1.12
01 1.12变成
insert into aa values ('1',1.12);
insert into aa values ('1',1.12);是吧?
这也不难,写个小程序即可?
不过觉得意义不太大
我倒是写了一个,如果需要,可以给你。。
ATCG(novel gene)就写出来让大家学习学习吧
如果有那正是太感谢了了。
sql ce太讨厌,油烟不进。没办法,只能通过这种比较土的办法了。
实施步骤
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();
会自动到perl站点下载数据的
EXP/IMP来实现,多方便呢?
database -> export -> table data ->OPTIONS 选中“include Schema/Owner name in insert statement
就可以了
现在的设计是把table data 导出后放到一个newtable中,在pda上读取newtable中的insertScript执行,把数据插入到sqlce中,所以要绕那么大一个圈子。
谢谢各位了,结帖