2016-04-04 14 views
0

既存のDBに基づいてDBモデルを作成するDDLスクリプトを作成しています。基本的に私が得たものを研磨するexpdp識別子 'UTILS.IDENTITY_VALUE'を宣言する必要があります

DBはOracle 11gR2であるため、まだ12c ID列はサポートされていません(https://oracle-base.com/articles/12c/identity-columns-in-oracle-12cr1)。 したがって、エクスポートされたステートメントはhttps://community.oracle.com/thread/3677631?start=0&tstart=0に記載されているようなシーケンストリガーを使用しています。おそらく元々はMS SQL Serverから変換されていました。

トリガーが

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; 

と同様に見える問題は、SQL Developerはと不平を言うことで "エラー(21,3):PLS-00201:識別子 'UTILS.IDENTITY_VALUE' を宣言しなければなりません"

私が元のDBに接続してトリガーをチェックすると、それは変わっていません。それは同じでも、宣言も、何も「UTILS.IDENTITY_VALUE」ではありません。そしてきれいに緑色です。

説明/アドバイスをよろしく!

+2

は 'UTILS' –

答えて

1

ほとんどの場合、新しいシステムにはUTILSというパッケージがありません。既存のシステムからコピーする必要があります。パッケージが存在する可能性もありますが、パッケージが表示されていないか(シノニムがない)アクセス権がありません。他に何も(むしろそうしかし可能)UTILSから必要ない場合は、次の操作を行うことができ

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

あなたは正しいです、感謝の@a_horse_with_no_nameとammoQ私たちのパッケージのコードを表示します。私はUTILSパッケージをインポートするのを忘れました。ありがとう! –