web-dev-qa-db-ja.com

エラー(2.17):PLS-00201:識別子 'DAYS_INTERVAL_TABLE'を宣言する必要があります

最近_Oracle 12c_に_Oracle Linux 7.6_をインストールしました。以前はWindowsにありました。最初に復元されたデータベースでは、一部の関数にコンパイルエラーがあります。

以下のクエリは、_line 2_に構文エラーがあることを通知しますが、問題がどこにあるのかわかりません。

エラー:Error (2.17): PLS-00201: The identifier 'DAYS_INTERVAL_TABLE' must be declared

クエリ:

_create or replace FUNCTION funRetornaDias (p_inicio date, p_termino date)
         RETURN DAYS_INTERVAL_TABLE PIPELINED IS

    v_date date;
    out_rec DAYS_INTERVAL := DAYS_INTERVAL(NULL,NULL);
    v_ref date;

BEGIN

    if p_inicio > p_termino then
        v_ref := p_inicio;
        v_date := p_termino;
    else
        v_ref := p_termino;
        v_date := p_inicio;
    end if; 

    while cast(to_char(v_date, 'YYYYMMDD') as number) <= cast(to_char(v_ref, 'YYYYMMDD') as number) loop
    begin

        out_rec.date_ := v_date;
        out_rec.day_of_week := datepart('DW', v_date);

        PIPE ROW(out_rec);
        v_date := v_date + interval '1' day;

    end;
    end loop;

    RETURN;

END;
_
1
Rafaells

impdbログを確認したところ、OIDの競合が原因でこのオブジェクトがインポートされなかったことがわかりました。

ログの最初にこのメッセージが見つかりました。

ORA-39083: Object type TYPE:"VERZANI"."DAYS_INTERVAL" failed to create with error:
ORA-02304: invalid object identifier literal

    Failing sql is:
    CREATE EDITIONABLE TYPE "VERZANI"."DAYS_INTERVAL"   OID 'C01480BB3D223837E0430100007FED58' AS OBJECT
           (DATE_           DATE,
            DAY_OF_WEEK     number(1,0));
    ORA-39083: Object type TYPE:"VERZANI"."DAYS_INTERVAL_TABLE" failed to create with error:
    ORA-02304: invalid object identifier literal

    Failing sql is:
    CREATE EDITIONABLE TYPE "VERZANI"."DAYS_INTERVAL_TABLE"   OID 'C01480BB3D273837E0430100007FED58' AS TABLE OF DAYS_INTERVAL;

そこで、スキーマを削除し、パラメータTRANSFORM=oid:nを使用してimpdpを再実行しました。これでデータベースは問題なく稼働しました。

1
Rafaells