我修改了表的两列,现在我具有无效的依赖关系,我需要检查所有这些依赖关系并动态重新编译
原来是
CREATE TABLE AHO_CUENTA_AHORRO
(
ID_CUENTA NUMBER(8) NOT NULL,
ID_SOCIO NUMBER(12) NOT NULL,
ESTADO VARCHAR2(1) NOT NULL,
TASA_INTERES NUMBER(3,1) NOT NULL,
FECHA_APERTURA DATE NOT NULL,
FECHA_CANCEL DATE,
SALDO_BLOQUEADO NUMBER(12) NOT NULL,
SALDO_DISPONIBLE NUMBER(12) NOT NULL,
CONSTRAINT PK_ID_AHORRO PRIMARY KEY (ID_CUENTA)
);
ALTER TABLE AHO_CUENTA_AHORRO
ADD CONSTRAINT SOCIO_CUENTA_AHORRO_FK
FOREIGN KEY (ID_SOCIO)
REFERENCES SOC_SOCIO (ID_SOCIO);
ALTER TABLE AHO_MOVIMIENTOS_CUENTA
ADD CONSTRAINT CUENTA_AHORRO_MOVIMIENTOS
FOREIGN KEY (ID_CUENTA)
REFERENCES AHO_CUENTA_AHORRO (ID_CUENTA);
现在我添加了这个
ALTER TABLE AHO_CUENTA_AHORRO
ADD (
SALDO_REAL NUMBER(12) DEFAULT 0 NOT NULL,
ID_TARIFARIO NUMBER(15) DEFAULT 1 NOT NULL,
CONSTRAINT FK_TARIFA FOREIGN KEY (ID_TARIFARIO) REFERENCES TARIFARIO(ID))
答案 0 :(得分:5)
要识别无效对象,可以运行以下查询:
SELECT * FROM all_objects WHERE status = 'INVALID';
然后您可以使用下面的DDL手动对它们进行手动编译:
ALTER <object_type> <object_name> COMPILE;
例如:
ALTER VIEW some_invalid_view COMPILE;
如果您只有几个无效的对象而没有很多依赖性,那么这种方法可能会很好地工作。
另一种方法是调用下面的过程,该过程按依赖关系顺序编译指定架构中的无效对象。
DBMS_UTILITY.compile_schema(schema => '<your_schema>', compile_all => false);
compile_all => false
仅编译无效的对象。