2016-04-04 4 views
0

werden. Ich erstelle DDL-Skripte, um ein DB-Modell basierend auf einer vorhandenen DB zu erstellen. Grundsätzlich polieren, was ich von expdp bekommen habe.Bezeichner 'UTILS.IDENTITY_VALUE' muss

Da die Datenbank Oracle 11gR2 ist, unterstützt sie die 12c-Identitätsspalten noch nicht (https://oracle-base.com/articles/12c/identity-columns-in-oracle-12cr1). Daher verwenden die exportierten Anweisungen Sequenzen-Trigger wie in https://community.oracle.com/thread/3677631?start=0&tstart=0 erwähnt - also vielleicht wurde es ursprünglich von MS SQL Server konvertiert, ich bin mir sicher.

Die Auslöser sehen ähnlich

create or replace TRIGGER "TABLEX_TRG" BEFORE INSERT ON TABLEX 
FOR EACH ROW 
DECLARE 
v_newVal NUMBER(12) := 0; 
v_incval NUMBER(12) := 0; 
BEGIN 
    IF INSERTING AND :new.TABLEXId IS NULL THEN 
    SELECT TABLEX_TABLEXId_SEQ.NEXTVAL INTO v_newVal FROM DUAL; 
    -- If this is the first time this table have been inserted into (sequence == 1) 
    IF v_newVal = 1 THEN 
     --get the max indentity value from the table 
     SELECT NVL(max(TABLEXId),0) INTO v_newVal FROM TABLEX; 
     v_newVal := v_newVal + 1; 
     --set the sequence to that value 
     LOOP 
      EXIT WHEN v_incval>=v_newVal; 
      SELECT TABLEX_TABLEXId_SEQ.nextval INTO v_incval FROM dual; 
     END LOOP; 
    END IF; 
    -- save this to emulate @@identity 
    utils.identity_value := v_newVal; 
    -- assign the value from the sequence to emulate the identity column 
    :new.TABLEXId := v_newVal; 
    END IF; 
END; 

Das Problem ist, dass SQL Developer mit beklagt "Fehler (21,3): PLS-00201: Bezeichner 'UTILS.IDENTITY_VALUE' deklariert werden müssen"

Seltsamerweise, wenn ich mich mit der ursprünglichen DB verbinde und den Trigger überprüfe, ist es dasselbe, keine Deklaration oder was auch immer von 'UTILS.IDENTITY_VALUE'. Und ist schön grün.

Jede Erklärung/Beratung willkommen!

+2

Zeigen Sie uns den Code des Pakets 'UTILS' –

Antwort

1

Höchstwahrscheinlich sollte ein Paket namens UTILS auf Ihrem neuen System fehlen; Sie müssen es auch aus dem bestehenden System kopieren. Es ist auch möglich, dass das Paket existiert, aber Sie sehen es nicht (fehlendes Synonym) oder haben keine Berechtigung, darauf zuzugreifen.

Wenn nichts anderes notwendig ist, von UTILS (eher unwahrscheinlich, aber möglich), können Sie Folgendes tun können:

create package UTILS as 
    identity_value number(12); 
end UTILS; 
/
+0

Sie haben Recht, dank @a_horse_with_no_name und ammoQ . Ich habe vergessen, das UTILS-Paket zu importieren. Danke! –

Verwandte Themen