谁有自动拼装库表里的数据为insert~~~~~values~~~~的过程?先给先得分.(是完整的SQL语句,包含表名与数据的,另外,不要给ms sql的,这个我已经有了)

解决方案 »

  1.   

    就是自动判断表里有多少列,什么类型,然后生成相应的insert语句
      

  2.   

    Oracle 写法:
    insert tableA (column_name1,column_name2,...)
    select column_name1,column_name2,... from tableB
      

  3.   


    好麻烦哟,做了个比较糙的方法,你试试把 一下存成一个sql脚本,把其中的路径换成自己的
    set verify off
    set head off
    set  linesize 10000
    set feedback off
    set serverout on
    set wrap off
    set colsep ','
    variable c refcursor;
    variable sqlStr varchar2(4000);
    variable sqlStr2 varchar2(4000);
    variable tabname varchar2(100);
    declare
    type t_test1 is table of varchar2(60);
    v_columnname varchar2(4000);
    v_str1 varchar2(4000):=' (';
    v_str2 varchar2(4000) := ' ';
    v_name varchar2(4000);
    begin
    v_name := '&tablename';
    :tabname := v_name;
    open :c for select column_name from user_tab_cols where upper(table_name) = upper(v_name) and hidden_column='NO';
    loop
    fetch :c into v_columnname;
    exit when :c%notfound;
    v_str1 := v_str1 || v_columnname || ',';
    v_str2 := v_str2 || '''''''||'||v_columnname|| '||'''''','; --dbms_output.put_line('column : '||v_columnname);

    end loop;v_str2 := '''insert into ' || v_name || substr(v_str1, 1, length(v_str1)-1)||')' || ' values(' || substr(v_str2, 1, length(v_str2)-1) || ');''';
    :sqlStr := 'select '||v_str2||' sql from '||v_name||';';
    end;
    /
    spool 'E:\David\workspace\oracle\script\plsqlblock3-1.sql';
    select 'set verify off;' from dual;
    select 'set head off;' from dual;
    select 'set  linesize 10000;' from dual;
    select 'set feedback off;' from dual;
    select 'set wrap off;' from dual;
    select 'set serverout on;' from dual;
    --select 'set colsep '','';' from dual;
    select 'spool ''E:\David\workspace\oracle\script\plsqlblock3.sql.log'';' from dual;
    print :sqlStr;
    select 'spool off;' from dual;
    spool off;
    @E:\David\workspace\oracle\script\plsqlblock3-1.sql;
    exit;把这里的路径E:\David\workspace\oracle\script换成自己的路径,把这个脚本存一个文件,比如为c:/abc.sql通过sqlplus "user/name" @c:/abc.sql执行这个sql脚本。中途会提示你输入tablename: 也就是你要转换的表的名字。最后打开E:\David\workspace\oracle\script\plsqlblock3.sql.log文件,里面就是insert into的脚本不过时间日期格式会有差异。你试试看先,看是不是你需要的结果。以上主要是用spool的知识。
      

  4.   

    加上set trimspool on格式更好一些。
      

  5.   

    up Inthirties, 太有耐心了
      

  6.   

    set verify off 
    set head off 
    set  linesize 10000 
    set feedback off 
    set serverout on 
    set wrap off 
    set colsep ',' 
    variable c refcursor; 
    variable sqlStr varchar2(4000); 
    variable sqlStr2 varchar2(4000); 
    variable tabname varchar2(100); 
    declare 
    type t_test1 is table of varchar2(60); 
    v_columnname varchar2(4000); 
    v_str1 varchar2(4000):=' ('; 
    v_str2 varchar2(4000) := ' '; 
    v_name varchar2(4000); 
    begin 
    v_name := '&tablename'; 
    :tabname := v_name; 
    open :c for select column_name from user_tab_cols where upper(table_name) = upper(v_name) and hidden_column='NO'; 
    loop 
    fetch :c into v_columnname; 
    exit when :c%notfound; 
    v_str1 := v_str1 || v_columnname || ','; 
    v_str2 := v_str2 || '''''''||'||v_columnname|| '||'''''','; --dbms_output.put_line('column : '||v_columnname); end loop; v_str2 := '''insert into ' || v_name || substr(v_str1, 1, length(v_str1)-1)||')' || ' values(' || substr(v_str2, 1, length(v_str2)-1) || ');'''; 
    :sqlStr := 'select '||v_str2||' sql from '||v_name||';'; 
    end; 

    spool 'E:\David\workspace\oracle\script\plsqlblock3-1.sql'; 
    select 'set verify off;' from dual; 
    select 'set head off;' from dual; 
    select 'set  linesize 10000;' from dual; 
    select 'set feedback off;' from dual; 
    select 'set wrap off;' from dual; 
    select 'set serverout on;' from dual; 
    --select 'set colsep '','';' from dual; 
    select 'spool ''E:\David\workspace\oracle\script\plsqlblock3.sql.log'';' from dual; 
    print :sqlStr; 
    select 'spool off;' from dual; 
    spool off; 
    @E:\David\workspace\oracle\script\plsqlblock3-1.sql; 
    exit; 把这里的路径E:\David\workspace\oracle\script换成自己的路径,把这个脚本存一个文件,比如为c:/abc.sql 通过sqlplus "user/name" @c:/abc.sql执行这个sql脚本。 中途会提示你输入tablename: 也就是你要转换的表的名字。 最后打开E:\David\workspace\oracle\script\plsqlblock3.sql.log文件,里面就是insert into的脚本 不过时间日期格式会有差异。 你试试看先,看是不是你需要的结果。 以上主要是用spool的知识。 
    这个还可以,试试看看,
      

  7.   

    各位不好意思,这阵子没上csdn,没结贴