最近_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;
_
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
を再実行しました。これでデータベースは問題なく稼働しました。