不行啊,我生成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没建起来.请问,你在那执行的?
编译当前用户下所有的无效对象.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;
我们经常就是把一些建表,插入数据,建存储过程的语句写成个sql脚本,然后运行一次就行了
可以使用dos dir命令生成列表,加上替换语句就可以。
如果需要,给你再详细说明。
不行啊,我生成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没建起来.请问,你在那执行的?
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;
你想这样做的话,要在每个SQL之间加"/"