如何通过shell脚本,将sql语句导入oracle?#!/bin/sh
sqlplus << EOF
/* comments */
sql statement1
sql statement2
.......EOF这样可以?

解决方案 »

  1.   

    shell:
          sqlplus userid/password@sid @sql.sql
    sql.sql:
          insert into tablename(col,col2) values('aaa','bbb');
          commit;
          @d:\XXXX.sql; //在sql.sql中调用其它的sql文件。
          exit;
    unix的话,要稍微改动一下路径的写法,不过思路是一样的。
      

  2.   

    楼主的不可以,稍微改下就可以了。#!/bin/sh
    sqlplus  /nolog  <<EOF
    /* comments */
    connect /  as sysdba;
    sql statement1
    sql statement2
    .......EOF 
      

  3.   

    SQLPLUS执行一个SQL脚本过程中如何能输出一些提示信息呢?
    执行完一个sql,在终端提示一下。
    test.sql:
    insert into tablename(col,col2) values('aaa','bbb');
    执行完上面SQL后,提示insert 成功
    insert into tablename(col,col2) values('aaa','bbb');
    执行完上面SQL后,提示insert 成功
    insert into tablename(col,col2) values('aaa','bbb');
    执行完上面SQL后,提示insert 成功
    commit;能实现吗?
      

  4.   

    sqlplus本身是有会显得,可能是你的echo没有打开。
    或者你把它的输出重定向到文件中去了。
      

  5.   

    我个人喜欢  set serverout on 
    然后  输出重定向到文件.log中
    #!/bin/ksh
    l_Log=/oracle/abc/analyze.log
    echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" > $l_Log
    echo "@ begin analyze Date: `date`" >> $l_Log
    echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" >> $l_Log
    sqlplus inter/inter123@sjs <<EOF  >>$l_Log
       set serverout on size 1000000;
       DECLARE
       BEGIN 
         FOR rec IN (SELECT table_name FROM user_tables 
         where table_name in 
         (select table_name from table_in_need))
         LOOP
           begin 
             DBMS_STATS.GATHER_TABLE_STATS(ownname=>'INTER',tabname=>rec.table_name,estimate_percent=>100,method_opt=>'FOR TABLE',CASCADE=>FALSE); 
             dbms_output.put_line('ANALYZE '|| rec.table_name ||' FINISHED');
           exception
              when others then 
                dbms_output.put_line(substr(sqlerrm,1,200));    
           end;  
         END LOOP;
       END;  
    /
    quit
    EOF