如何快速重新編譯所有的預存程序,編譯預存程序
自己的一個寫法,大概思路是從sys.Objects裡取得所有的預存程序,然後拼動態字串來使用sp_recompile重新編譯所有的SP。
SELECT ROW_NUMBER() OVER(ORDER BY name) AS RID,'exec sp_recompile ''' + name +'''' AS TextINTO #TEMPFROM sys.objects WHERE TYPE = 'P'DECLARE @MaxID INTDECLARE @SQL VARCHAR(MAX)SELECT @MaxID = MAX(RID) FROM #TEMPWHILE (@MaxID IS NOT NULL)BEGINSELECT @SQL = TextFROM #TEMPWHERE RID = @MaxID--PRINT @SQLEXEC (@SQL)SELECT @MaxID = MAX(RID) FROM #TEMP WHERE RID < @MaxID END
不知道還有沒有什麼更好的方法。
怎重新編譯預存程序?用一條什麽命令?
使用execute,例如:
execute obooke;
oracle中怎批量編譯視圖與預存程序
1.批量編譯儲存工程的預存程序
create or replace procedure compile_invalid_procedures(
p_owner varchar2 -- 所有者名稱,即 SCHEMA) as--編譯某個使用者下的無效預存程序
str_sql varchar2(200);begin
for invalid_procedures in (select object_name from all_objects
where status = 'INVALID' and object_type = 'PROCEDURE' and owner=upper(p_owner))loop
str_sql := 'alter procedure ' ||invalid_procedures.object_name || ' compile';begin
execute immediate str_sql;exception
--When Others Then Null;
when OTHERS Then
dbms_output.put_line(sqlerrm);end;end loop;end;
2.批量編譯視圖的預存程序