重新編譯無效資料庫組件,編譯無效資料庫組件
You can validate different components in the database by running the script $ORACLE_HOME/rdbms/admin/catpatch.sql via SQL*Plus:
spool catpatch.log
connect / as sysdba
shutdown immediate
startup migrate
@?/rdbms/admin/catpatch.sql
@?/rdbms/admin/utlrp.sql
SELECT comp_name, version, status
FROM dba_registry;
spool off
If you are on 10g Release 2, then perform:
connect / as sysdba
spool dictreload.log
startup restrict
alter system set shared_pool_size = 512M scope=spfile;
alter system set java_pool_size = 150M scope=spfile;
alter system set aq_tm_processes = 1 scope=spfile;
alter system set streams_pool_size = 10M scope=spfile;
alter system set cluster_database = false scope=spfile; -- If on RAC
shutdown immediate
startup upgrade
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
@?/rdbms/admin/catupgrd.sql
spool off
alter system set cluster_database = true scope=spfile; -- If on RAC
shutdown immediate
startup
@?/rdbms/admin/utlrp.sql
oracle 過程 重新編譯也無效
編譯完成,不代表裡面語句沒問題,這種情況是預存程序裡存在某種錯誤
在 SQL *Plus 或者 PL/SQL Developer 的 Command Windows 中,執行
show errors procedure USP_EXCEPTION;
查看一下錯誤是什麼.
我的修改如下:
CREATE OR REPLACE PROCEDURE USP_EXCEPTION(EMPNO INTEGER, --批次ID
P_FM NUMBER, --分母
P_FZ NUMBER, --分子
P_RESULT OUT NUMBER --結果
) IS
V_RAISE EXCEPTION; --異常處理
type type_table_pcmx is varray(4) of varchar2(20);
TABLE_PCMX type_table_pcmx;
BEGIN
IF P_FZ = 0 THEN
RAISE V_RAISE;
END IF;
P_RESULT := P_FM / P_FZ;
SELECT ENAME, EMPNO, JOB, DEPTNO
INTO TABLE_PCMX(1),TABLE_PCMX(2),TABLE_PCMX(3),TABLE_PCMX(4)
FROM EMP
WHERE EMPNO = EMPNO;
EXCEPTION
WHEN V_RAISE THEN
RAISE_APPLICATION_ERROR(-20010, 'ERROR:分子為零!');
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20011, 'ERROR:批次明細不存在!');
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20012, 'ERROR:資料錯誤!');
END;
oracle資料庫開發人員說‘需要重新編譯一下’是什? 是說要重新跑某個過程
重新編譯,就是某個過程或者函數哪裡做了修改 需要重新編譯成可以執行的檔案,並不是說重新跑某個過程。編譯完成之後,把編譯好了的過程再重新運行。