修改好的多个存储过程或包,要到用户服务器上更新使用,可以运行脚本一次更新吗?怎么做?
还是需要一个一个单独更新?(这个更新多了的话,很麻烦的)

解决方案 »

  1.   

    可以的啊
    我们经常就是把一些建表,插入数据,建存储过程的语句写成个sql脚本,然后运行一次就行了
      

  2.   

    不用,
    可以使用dos dir命令生成列表,加上替换语句就可以。
    如果需要,给你再详细说明。
      

  3.   


    不行啊,我生成sql脚本,在PL/SQL的SQL WINDOW窗口执行,它会将两个过程放在一个里,如:
    CREATE OR REPLACE PROCEDURE test1
    is 
    begin
    ...
    end test1;CREATE OR REPLACE PROCEDURE test2
    is 
    begin
    ...
    end test2;执行后test1中也包含了test2的代码,test2没建起来.请问,你在那执行的?
      

  4.   

    编译当前用户下所有的无效对象.CREATE OR REPLACE PROCEDURE compile_all_obj AS
      CURSOR cur_invalid_objects IS
        SELECT object_name, object_type
          FROM user_objects
         WHERE status = 'INVALID';
      rec_columns cur_invalid_objects%ROWTYPE;
      err_status  NUMERIC;
    BEGIN
      dbms_output.enable(10000);
      OPEN cur_invalid_objects;
      LOOP
        FETCH cur_invalid_objects
          INTO rec_columns;
        EXIT WHEN cur_invalid_objects%NOTFOUND;
      
        dbms_output.put_line('Recompiling ' || rec_columns.object_type || '  ' ||
                             rec_columns.object_name);
        dbms_ddl.alter_compile(rec_columns.object_type,
                               NULL,
                               rec_columns.object_name);
      END LOOP;
      CLOSE cur_invalid_objects;
    EXCEPTION
      WHEN OTHERS THEN
        BEGIN
          err_status := SQLCODE;
          dbms_output.put_line(' Recompilation failed : ' ||
                               SQLERRM(err_status));
        
          IF (cur_invalid_objects%ISOPEN) THEN
            CLOSE cur_invalid_objects;
          END IF;
        
        EXCEPTION
          WHEN OTHERS THEN
            NULL;
        END;
    END;
      

  5.   


    你想这样做的话,要在每个SQL之间加"/"
      

  6.   

     chenqingyu :你想这样做的话,要在每个SQL之间加"/" 提示:无效SQL语句
      

  7.   

    在每个SQL之间加"/" ,与不加是一样的效果
      

  8.   

    不要在sql window中做,执行命令是在command window中做