Ada beberapa cara utk solve the problem:
1. Coba di depan DATA_SEQUENCE.NEXTVAL
tambahkan:HIS, jadi :
HIS.DATA_SEQUENCE.NEXTVAL

Pastikan sequence DATA_SEQUENCE bisa diakses oleh user.
Kalau belum bisa juga, sbg SYS atau DBA atau user HIS, jalankan:

GRANT SELECT ON DATA_SEQUENCE TO PUBLIC;

2. Dengan membuat PUBLIC SYNONYM dari sequence tsb, sbg SYS atau DBA 
jalankan:
CREATE PUBLIC SYNONYM DATA_SEQUENCE FOR HIS.DATA_SEQUENCE;

cmiiw,
bw

--- In [email protected], "Syam Ach. S." 
<[EMAIL PROTECTED]> wrote:
>
> Yth.
> Saya mempunyai implementasi ORACLE DATABASE sbb:
> 1. SCHEMA=>HIS_DATA=>TRIGGERS=>DATA_AFTER_IDU status VALID
> 2. SCHEMA=>HIS_DATA=>TRIGGERS=>DATA_BEFORE_IDU status INVALID
> 3. SCHEMA=>HIS_DATA=>TRIGGERS=>JOB_DATA_BEFORE_I status INVALID
> 4. SCHEMA=>HIS_DATA=>PACKAGE BODIES=>TIME_SERIES_MASK status 
INVALID
> 5. SCHEMA=>HIS=>SEQUENCES=>DATA_SEQUENCE dependent on 
HIS.IMPORT_UNIT_UNIT_BEFORE_I, HIS.JOB_TS_BEFORE_I, 
HIS.JOB_TS_BEFORE_IDU, HIS.PARAMETER_AFTER_I and HIS.STATION_AFTER_I
> 
> Muncul ORA-04098 Trigger HIS.JOB_DATA_BEFORE_I
> Saya sdh mencoba ALTER TRIGGER [OBJECT] COMPILE, muncul error
> JOB_DATA_BEFORE_I, show errors: DATA_SEQUENCE.NEXTVAL must be 
DECLARED
> DATA_BEFORE_IDU, show errors: DATA_SEQUENCE.NEXTVAL, 
TIME_SERIES_MASK.INSERTTSBASIC, TIME_SERIES_MASK.CALCULATEDERIVEDTS, 
TIME_SERIES_MASK.ADAPTAVAILABLEINTERVAL must be DECLARED
> Mohon bantuan PARA PAKAR ORACLE utk menjadikan INVALID menjadi 
VALID dan kami sertakan file scriptnya , terima Kasih
> 
> Hormat saya,
> SYAM
> 
> 
>       
_____________________________________________________________________
_______________
> Get easy, one-click access to your favorites. 
> Make Yahoo! your homepage.
> http://www.yahoo.com/r/hs 
>   ----------
> 
> tabel JOB_DATA_BEFORE_I
> 
> BEGIN
> DECLARE NextPk NUMBER(15);
> BEGIN
>       IF INSERTING THEN
>               IF :NEW.JOB_DATA_PK IS NULL THEN
>                       SELECT DATA_SEQUENCE.NEXTVAL
>                       INTO  NextPk
>                       FROM SYS.DUAL;
>                       :NEW.JOB_DATA_PK := NextPk;
>               END IF;
>       END IF;
> END;
> END JOB_DATA_BEFORE_I;
> 
> Tabel DATA_BEFORE_IDU
> 
> DECLARE
> 
>       boolDerivedInsert                               BOOLEAN := 
FALSE;
>       boolDerivedDelete                               BOOLEAN := 
FALSE;
>       boolTSOldAdaptAvailable         BOOLEAN := FALSE;
>       boolTSNewAdaptAvailable         BOOLEAN := FALSE;
>       boolIncAvailableCount           BOOLEAN := FALSE;
>       boolDecAvailableCount           BOOLEAN := FALSE;
>       NextPk NUMBER(15);
>       lngTSOldBasicNumber             NUMBER;
>       lngTSNewBasicNumber             NUMBER;
> 
> BEGIN
> 
>       DBMS_OUTPUT.PUT_LINE('BEFORE TRIGGER');
> 
>       IF (INSERTING) THEN
> 
>               DBMS_OUTPUT.PUT_LINE('  In INSERTING ' 
|| :NEW.TIME_SERIES_PK);
> 
>               IF (:NEW.DATA_PK IS NULL) THEN
>                       SELECT DATA_SEQUENCE.NEXTVAL
>                       INTO  NextPk
>                       FROM SYS.DUAL;
>                       :NEW.DATA_PK := NextPk;
>               END IF;
> 
>               boolIncAvailableCount := (:NEW.VERSION = 1);
>               boolDerivedInsert := (:NEW.VALID_STATUS_PK = -1) AND 
(:NEW.ACTUAL = -1);
> 
>               TIME_SERIES_MASK.InsertTSBasic(:NEW.TIME_SERIES_PK);
>               boolTSNewAdaptAvailable:= TRUE;
> 
>       ELSIF (DELETING) THEN
> 
>               DBMS_OUTPUT.PUT_LINE('In DELETING');
> 
>               IF (:OLD.ACTUAL = -1) THEN
>                       RAISE_APPLICATION_ERROR(-20000,'You cannot 
delete an actual data point');
>               END IF;
> 
>               -- IF you have 3 versions of a data point, you must 
do this:
>               -- VERSION 3 --> ACTUAL = 0
>               -- REMOVE V3
>               -- REMOVE V2
>               -- REMOVE V1 --> decrease the number of data points
> 
>               IF (:OLD.VERSION = 1) Then
>                       TIME_SERIES_MASK.InsertTSBasic
(:OLD.TIME_SERIES_PK);
>                       boolDecAvailableCount := TRUE;
>                       boolTSOldAdaptAvailable:= TRUE;
>               END IF;
> 
>       ELSIF (UPDATING) THEN
> 
>               DBMS_OUTPUT.PUT_LINE('  In UPDATING');
> 
>               IF (:OLD.VERSION <> :NEW.VERSION) THEN
>                       RAISE_APPLICATION_ERROR(-20001,'You cannot 
modify the version of a data point');
>               END IF;
> 
>               IF (:OLD.TIME_SERIES_PK = :NEW.TIME_SERIES_PK) THEN
> 
>                       TIME_SERIES_MASK.InsertTSBasic
(:NEW.TIME_SERIES_PK);
>                       boolTSOldAdaptAvailable:= TRUE;
> 
>                       IF (:OLD.TIME <> :NEW.TIME) OR (:OLD.VALUE 
<> :NEW.VALUE) OR
>                               (:OLD.VALID_STATUS_PK 
<> :NEW.VALID_STATUS_PK) OR (:OLD.ACTUAL <> :NEW.ACTUAL) THEN
> 
>                               boolDerivedDelete := 
(:OLD.VALID_STATUS_PK = -1) AND (:OLD.ACTUAL = - 1);
>                               boolDerivedInsert := 
(:NEW.VALID_STATUS_PK = -1) OR (:NEW.ACTUAL = -1);
> 
>                       END IF;
> 
>               ELSE
> 
>                       TIME_SERIES_MASK.InsertTSBasic
(:NEW.TIME_SERIES_PK);
>                       TIME_SERIES_MASK.InsertTSBasic
(:OLD.TIME_SERIES_PK);
> 
>                       boolTSOldAdaptAvailable:= TRUE;
>                       boolTSNewAdaptAvailable:= TRUE;
> 
>                       boolDerivedDelete := (:OLD.VALID_STATUS_PK 
= -1) AND (:OLD.ACTUAL = - 1);
>                       boolDerivedInsert := (:NEW.VALID_STATUS_PK 
= -1) OR (:NEW.ACTUAL = -1);
> 
>                       -- If there is more than one version from a 
data point and you change the
>                       -- Time_Series_PK, then the number of data 
points for the old time series must
>                       -- not be decreased. Only if there is only 
one Version.
>                       -- Problem: The one version could be for 
example number 4, if the recent three
>                       --      Versions were deleted. Select Count
(*) must be executed.
> 
>                       IF (:OLD.VERSION = 1) THEN
>                               boolDecAvailableCount :=TRUE;
>                       END IF;
> 
>                       -- Problem: In the new Time Series, there 
could already exist a data point with
>                       -- this time --> the Version would have to 
be found with SELECT MAX(VERION)
> --                    IF :NEW.ACTUAL = -1 THEN
> --                            dbl_INC_AVAILABLE_COUNT := 1;
> --                    END IF;
>               END IF;
> 
>       END IF;
> 
>       IF (boolDerivedInsert) THEN
>               TIME_SERIES_MASK.CalculateDerivedTS
(:NEW.TIME_SERIES_PK,'INSERT',:NEW.VALUE,:NEW.TIME);
>       END IF;
>       IF (boolTSNewAdaptAvailable) THEN
>               TIME_SERIES_MASK.AdaptAvailableInterval
(:NEW.TIME_SERIES_PK,boolIncAvailableCount,boolDecAvailableCount,:NEW
.TIME);
>       END IF;
> 
> --    IF (boolDerivedDelete) THEN
> --            TIME_SERIES_MASK.CalculateDerivedTS
(:OLD.TIME_SERIES_PK,'DELETE',:OLD.VALUE,:OLD.TIME);
> --    END IF;
>       IF (boolTSOldAdaptAvailable) THEN
>               TIME_SERIES_MASK.AdaptAvailableInterval
(:OLD.TIME_SERIES_PK,boolIncAvailableCount,boolDecAvailableCount,:OLD
.TIME);
>       END IF;
> 
> END;
> 
> tabel DATA_AFTER_IDU
> DECLARE
>       i                                               NUMBER;
>       boolUpdate                              BOOLEAN;
>       TSBasic                         
        DATA_TRIGGER.Type_TSBasic;
>       TSDerived                       
        DATA_TRIGGER.Type_TSDerived;
>       TSInterval                      
        DATA_TRIGGER.Type_TSInterval;
>       TSBasic_NUM                             BINARY_INTEGER := 0;
>       dbl_DATA_AVAILABLE      NUMBER:=0;
> BEGIN
> 
>       --DBMS_OUTPUT.PUT_LINE(' ');
>       DBMS_OUTPUT.PUT_LINE('AFTER TRIGGER');
>       DBMS_OUTPUT.PUT_LINE('  Anzahl TSBasic ' ||
        DATA_TRIGGER.TSBasic_NUM);
>       DBMS_OUTPUT.PUT_LINE('  Anzahl TSDerived ' ||
        DATA_TRIGGER.TSDerived_NUM);
>       DBMS_OUTPUT.PUT_LINE('  Anzahl TSInterval ' ||
        DATA_TRIGGER.TSInterval_NUM);
> 
>       FOR i IN 1..DATA_TRIGGER.TSInterval_NUM LOOP
> 
>               TSInterval:=DATA_TRIGGER.TSInterval(i);
> 
>               --  DBMS_OUTPUT.PUT_LINE('TS: ' || 
DATA_TRIGGER.TSInterval(lng_LOOPINDEX).TIME_SERIES_PK);
>               DBMS_OUTPUT.PUT_LINE('DATA_RESULT_PK: ' || 
TSInterval.DATA_RESULT_PK );
> 
>               IF  (TSInterval.OPERATION_PK = 1081987) THEN
> 
>                       --   DBMS_OUTPUT.PUT_LINE('MINIMUM neu 
eruieren');
> 
>                       UPDATE  DATA_RESULT
>                       SET   VALUE =( SELECT /*+ INDEX(data 
data_ts_time_actual_vs_i) */ MIN(VALUE)
>                                                               FROM 
DATA
>                                                       
        WHERE DATA.TIME_SERIES_PK = TSInterval.TIME_SERIES_PK_BASIC
>                                                               AND 
TIME >= TSInterval.TIME_FROM
>                                                               AND 
TIME < TSInterval.TIME_TO
>                                                               AND 
ACTUAL = -1
>                                                               AND 
VALID_STATUS_PK = -1)
>                       WHERE  DATA_RESULT_PK = 
TSInterval.DATA_RESULT_PK;
> 
>               ELSIF (TSInterval.OPERATION_PK = 1081988) THEN
> 
>                       --   DBMS_OUTPUT.PUT_LINE('Maximum neu 
eruieren');
>                       --   DBMS_OUTPUT.PUT_LINE
(DATA_TRIGGER.V_UpdateTS(i).TIME_FROM);
>                       --   DBMS_OUTPUT.PUT_LINE
(DATA_TRIGGER.V_UpdateTS(i).TIME_TO);
> 
>                       UPDATE  DATA_RESULT
>                       SET   VALUE =(  SELECT /*+ INDEX(data 
data_ts_time_actual_vs_i) */ MAX(VALUE)
>                                                       FROM DATA
>                                                       WHERE 
DATA.TIME_SERIES_PK = TSInterval.TIME_SERIES_PK_BASIC
>                                                       AND TIME >= 
TSInterval.TIME_FROM
>                                                       AND TIME < 
TSInterval.TIME_TO
>                                                       AND ACTUAL 
= -1
>                                                       AND 
VALID_STATUS_PK = -1)
>                       WHERE  DATA_RESULT_PK = 
TSInterval.DATA_RESULT_PK;
> 
>               ELSIF (TSInterval.OPERATION_PK =        1081985) THEN
> 
>                       UPDATE  DATA_RESULT
>                       SET   VALUE =( SELECT /*+ INDEX(data 
data_ts_time_actual_vs_i) */ SUM(VALUE)
>                                                               FROM 
DATA
>                                                       
        WHERE DATA.TIME_SERIES_PK = TSInterval.TIME_SERIES_PK_BASIC
>                                                               AND 
TIME >= TSInterval.TIME_FROM
>                                                               AND 
TIME < TSInterval.TIME_TO
>                                                               AND 
ACTUAL = -1
>                                                               AND 
VALID_STATUS_PK = -1)
>                       WHERE  DATA_RESULT_PK = 
TSInterval.DATA_RESULT_PK;
> 
>               ELSIF (TSInterval.OPERATION_PK =  1081992) THEN
> 
>                       UPDATE  DATA_RESULT
>                       SET   VALUE =( SELECT /*+ INDEX(data 
data_ts_time_actual_vs_i) */ COUNT(*)
>                                               FROM DATA
>                                                       
        WHERE DATA.TIME_SERIES_PK = TSInterval.TIME_SERIES_PK_BASIC
>                                                               AND 
TIME >= TSInterval.TIME_FROM
>                                                               AND 
TIME < TSInterval.TIME_TO
>                                                               AND 
ACTUAL = -1
>                                                               AND 
VALID_STATUS_PK = -1)
>                       WHERE  DATA_RESULT_PK = 
TSInterval.DATA_RESULT_PK;
> 
>               END IF;
>       END LOOP;
> 
> 
>       FOR i IN 1..DATA_TRIGGER.TSDerived_NUM LOOP
>               TSDerived:=DATA_TRIGGER.TSDerived(i);
>               IF (TSDerived.CHANGED = -1) THEN
>                       DBMS_OUTPUT.PUT_LINE('     Adapt Change 
Interval ' ||   i || ' - ' || TSDerived.TIME_SERIES_PK);
>                       UPDATE TIME_SERIES
>                       SET     DATE_CHANGED_MIN = 
TSDerived.DATE_CHANGED_MIN,
>                                       DATE_CHANGED_MAX = 
TSDerived.DATE_CHANGED_MAX,
>                                       DATE_CHANGED_COUNT = 
DATE_CHANGED_COUNT + 1,
>                                       DATE_CHANGED_LAST = SYSDATE,
>                                       CHANGED = -1
>                       WHERE TIME_SERIES_PK = 
TSDerived.TIME_SERIES_PK;
>               END IF;
>       END LOOP;
> 
> 
>       FOR i IN 1..DATA_TRIGGER.TSBasic_NUM LOOP
>               TSBasic:=DATA_TRIGGER.TSBasic(i);
>               TSBasic_NUM:=DATA_TRIGGER.TSBasic_NUM;
> 
>               --DBMS_OUTPUT.PUT_LINE('     TSBasic ' ||       i 
|| ' - ' || TSBasic.TIME_SERIES_PK);
>               --DBMS_OUTPUT.PUT_LINE('       COUNT : '   || 
TSBasic.DATE_AVAILABLE_COUNT);
>               --DBMS_OUTPUT.PUT_LINE('       FROM : '   || 
TSBasic.DATE_AVAILABLE_FROM);
>               --DBMS_OUTPUT.PUT_LINE('       TO : '   || 
TSBasic.DATE_AVAILABLE_TO);
> 
>               IF (TSBasic.CHANGED) THEN
>                       --DBMS_OUTPUT.PUT_LINE('  Count ' || 
TSBasic.TIME_SERIES_PK || ' ' || TSBasic.DATE_AVAILABLE_COUNT );
> 
>               IF (TSBasic.DATE_AVAILABLE_COUNT <> 0) OR 
(TSBasic.DATE_AVAILABLE_FROM IS NOT NULL) THEN
>                       dbl_DATA_AVAILABLE:=0;
>                       IF (TSBasic.DATE_AVAILABLE_COUNT > 0) THEN
>                               dbl_DATA_AVAILABLE:=-1;
>                       END IF;
> 
>                       UPDATE TIME_SERIES
>                       SET     DATE_AVAILABLE_COUNT = 
TSBasic.DATE_AVAILABLE_COUNT,
>                                       DATA_AVAILABLE = 
dbl_DATA_AVAILABLE,
>                                       DATE_AVAILABLE_FROM = 
TSBasic.DATE_AVAILABLE_FROM,
>                                       DATE_AVAILABLE_TO = 
TSBasic.DATE_AVAILABLE_TO,
>                                       DATE_CHANGED_LAST = SYSDATE
>                       WHERE TIME_SERIES_PK = 
TSBasic.TIME_SERIES_PK;
>               END IF;
> 
>               IF (TSBasic.DATA_POINT_DELETED = TRUE) THEN
>                       --DBMS_OUTPUT.PUT_LINE('       DP DELETED');
>                               UPDATE TIME_SERIES
>                               SET     DATE_AVAILABLE_FROM = (
        SELECT /*+ INDEX(data data_ts_time_actual_vs_i) */ MIN(TIME)
>                                                               
                                                FROM DATA
>                                                               
                                                WHERE TIME_SERIES_PK 
= TIME_SERIES.TIME_SERIES_PK),
>                                               DATE_AVAILABLE_TO =  
(       SELECT /*+ INDEX(data data_ts_time_actual_vs_i) */ MAX(TIME)
>                                                               
                                                FROM DATA
>                                                               
                                                WHERE TIME_SERIES_PK 
= TIME_SERIES.TIME_SERIES_PK)
>                               WHERE TIME_SERIES_PK = 
TSBasic.TIME_SERIES_PK;
>               END IF;
>               END IF;
>       END LOOP;
> 
>       DATA_TRIGGER.TSDerived_NUM:=0;
>       DATA_TRIGGER.TSBasic_NUM:=0;
>       DATA_TRIGGER.TSInterval_NUM:=0;
>       DATA_TRIGGER.TSBasic_TSDerived_NUM:=0;
> 
> END;
> 
> [Non-text portions of this message have been removed]
>


Kirim email ke