谢谢!
访问数据库应该不是问题,数据库链路已经配好了,可以直接使用。
我也是这样想的,把源代码读出来,拼在一起,然后呢?
A、我能否直接执行这个串去在另一个数据库上生成存储过程?
B、还是必须先存成一个脚本文件(这是脚本中生成的脚本文件),然后在脚本中调用SQL PLUS去执行前面生成的脚本?,怎么调用?
上面两个办法都可以达到目的,具体怎么实现呢?

解决方案 »

  1.   

    look into export and import command-line utility which come with Oraclehere are the steps to transfer stored procedures:1. From database 1, export the data with the following options    exp scott/tiger file=expdat.dmp rows=n grants=n constraints=n2. On database 2, drop all the stored procedures and import the above file    imp user2/pwd2 file=expdat.dmp ignore=nThis will create all stored procedures in db2.
      

  2.   

    你可以用toad等工具将触发器和函数导出,当然你也可以通过dba_source等系统表自己生成脚本。
    可以将脚本内容直接贴入sqlplus,运行后即以编译好,你也可以运行alter procedure prname compile重编译;
    也可已在sqlplus下 输入 @ ..\..\ xx.sql;运行你的脚本文件,..\..\ xx.sql为文件全路经名。
      

  3.   

    你用toad工具到处把
    www.quest.com
      

  4.   

    从www.asktom.com抄来的脚本*****************getcode.sql**************************
    set feedback off
    set heading off
    set termout off
    set linesize 1000
    set trimspool on
    set verify off
    spool &1..sql
    prompt set define off
    select decode( type||'-'||to_char(line,'fm99999'),
                   'PACKAGE BODY-1', '/'||chr(10),
                    null) ||
           decode(line,1,'create or replace ', '' ) ||
           text text
      from user_source
     where name = upper('&&1')
     order by type, line;
    prompt /
    prompt set define on
    spool off
    set feedback on
    set heading on
    set termout on
    set linesize 100*********************getallcode.sql**************************
    set termout off
    set heading off
    set feedback off
    set linesize 50
    spool xtmpx.sql
    select '@getcode ' || object_name
    from user_objects
    where object_type in ( 'PROCEDURE', 'FUNCTION', 'PACKAGE' )
    /
    spool off
    spool getallcode_INSTALL
    select '@' || object_name
    from user_objects
    where object_type in ( 'PROCEDURE', 'FUNCTION', 'PACKAGE' )
    /
    spool off
    set heading on
    set feedback on
    set linesize 130
    set termout on
    @xtmpx.sql
      

  5.   

    别忘了 grant select on dba_source to youuser;
      

  6.   

    非常谢谢各位!我刚才已经写了个过程完成从库中取出代码写成一个脚本文件的功能。手动执行这个脚本(在SQLPLUS里 START XXX.TXT)可以完成我要的功能,可是由于要在十几个数据库服务器上都执行一遍,所以还是比较麻烦,有没有让这个执行脚本的操作自动化的办法?
      

  7.   

    to saucer(思归) :
    你的办法是不是把所有的东西都导入导出了,我只要更新过程和函数就可以了,其它的东西不能改!
      

  8.   

    这是个把特定的存储过程保存到文本的过程.
    先修改init.ora
    例如:
    utl_file_dir=/usr    //路径为 oracle所在的盘:/usr
    此过程将用户TEMP的P1过程的代码保存到ORACLE安装盘下/USR/TEXT.TXT中
    create or replace procedure TEST
    is
      file_handle utl_file.file_type;
      STOR_TEXT VARCHAR2(4000);
      N NUMBER;
    I NUMBER;
     begin
    I:=1;
       SELECT MAX(LINE) INTO N FROM ALL_SOURCE WHERE OWNER='TEMP' AND NAME='P1';
    file_handle:=utl_file.fopen('/usr','test.txt','a');
    WHILE I<=N LOOP
       SELECT TEXT  INTO STOR_TEXT FROM ALL_SOURCE WHERE OWNER='TEMP' AND NAME='P1' AND LINE= I;
       I:=I+1;
       utl_file.put_line(file_handle,stor_text);
    END LOOP;
       utl_file.fclose(file_handle);
    commit;
    end TEST;
    /