insert into tbname(....) select ....... from tbname2

解决方案 »

  1.   

    哦,不是这样的
    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)
      

  2.   

    insert into table2 
    select 'insert into table1(col1,col2,col3) values('
    ||col1||','||col2||','||col3||')' from table1;
      

  3.   

    是想把数据转换成sql吗?直接拼字符串就行了select 'insert into table1(col1,col2,col3) values('
    ||col1||','||col2||','||col3||')' from table1;
    如果是字符类型两边加引号,如果是日期类型考虑用to_date函数。
      

  4.   

    但是如何在只知道表名的情况下实现呢?
    我希望把它做的通用一点,我大概有50张表需要倒。最长的一张表有60多个的字段,还可能被修改,直接写的话...有点痛苦。
    oracle有像sql server 里syscolumns这样的系统表吗?
      

  5.   

    SYS.USER_TAB_COLUMNS用这个视图,或者SYS.USER_TAB_COLS。
      

  6.   

    我对oracle 不太熟...如果或是sql server的话,因该可以这样
    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中如何实现?
      

  7.   

    对于简单的复制可用:
    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;
      

  8.   

    不,其实是需要做一个数据迁移,oracle到sql ce,我只知道能用insertScript,或者还有别的好办法?请高手指点。
      

  9.   

    做数据迁移的方法很多,各人各喜欢了
    比如
    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);是吧?
    这也不难,写个小程序即可?
    不过觉得意义不太大
    我倒是写了一个,如果需要,可以给你。。
      

  10.   

    楼主应该是 ATCG(novel gene)的意思吧
    ATCG(novel gene)就写出来让大家学习学习吧
      

  11.   

    忙活了半天,就是为了那一个小程序阿!
    如果有那正是太感谢了了。
    sql ce太讨厌,油烟不进。没办法,只能通过这种比较土的办法了。
      

  12.   

    提供一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();
      

  13.   

    当然也可以用PL/SQL实现,不过我觉得还是PERL简洁,
      

  14.   

    补充一点,在安装Perl的数据库模块的时候,必须是联网状态,因为你执行install dbi的时候
    会自动到perl站点下载数据的
      

  15.   

    再说了,数据迁移,如果是迁移一个用户,完全可以用ORACLE的,导出/导入工具
    EXP/IMP来实现,多方便呢?
      

  16.   

    你可以用pl/sql developer 中提供的导出功能,可以提出insert 语句,是标准的sql语句,很方便的,也不用写程序,选择一下即可!
      

  17.   

    toad也有这样的功能。。
    database -> export -> table data ->OPTIONS 选中“include Schema/Owner name in insert statement
    就可以了
      

  18.   

    晕阿!折腾Perl就是半天,
    现在的设计是把table data 导出后放到一个newtable中,在pda上读取newtable中的insertScript执行,把数据插入到sqlce中,所以要绕那么大一个圈子。
    谢谢各位了,结帖