[解決済み] PLS-00302: component must be declared when it exists?」と表示されます。
質問
Oracle10.2を使っています。
私は、あるスキーマ(S1)から別のスキーマ(S2)にいくつかのORACLEオブジェクトを移動するスクリプトで作業しています。 私はDBAの役割で関数を作成しています。 移動すると、私の関数の1つが無効になりますが、私は理由を理解していません。 そのコードは次のようなものです。
MY_FUNC
CREATE OR REPLACE FUNCTION S2."MY_FUNC" RETURN VARCHAR2 IS
something VARCHAR2;
othervar VARCHAR2 (50):= 'TEST';
BEGIN
something := S2.MY_FUNC2();
/*some code*/
return othervar;
END;
/
もし私が
MY_FUNC2
スキーマなしで、それは動作します。
something := MY_FUNC2();
ではなく
something := S2.MY_FUNC2();
マイ_FUNC2
CREATE OR REPLACE FUNCTION S2."MY_FUNC2" RETURN VARCHAR2 IS
something BOOLEAN;
othervar VARCHAR2 (50) := 'TEST2';
BEGIN
/*some code*/
return othervar;
END;
/
MY_FUNC2には、こんな同義語があります。
CREATE OR REPLACE PUBLIC SYNONYM "MY_FUNC2" FOR "S2"."MY_FUNC2"
MY_FUNC
はエラーでコンパイルされます。
PLS-00302: コンポーネント 'MY_FUNC2' を宣言する必要があります。
私の関数が他のスキーマ(S1)にあるときは、まったく同じ構造で、シノニムもまったく同じように(ただしS1を指して)作成されたのに、なぜこのエラーが発生するのか理解できないのです。
MY_FUNC
は正常にコンパイルされました。
この関数とシノニムは元々作っていないんです。S2で何か権限が抜けている可能性はありませんか?
MY_FUNC
は正常に動作するのでしょうか?
どのように解決するのですか?
スキーマと同じ名前のオブジェクトがある場合、このエラーが発生することがあります。たとえば、以下のような場合です。
create sequence s2;
begin
s2.a;
end;
/
ORA-06550: line 2, column 6:
PLS-00302: component 'A' must be declared
ORA-06550: line 2, column 3:
PL/SQL: Statement ignored
を参照する場合
S2.MY_FUNC2
はオブジェクト名を解決しているので、S2 をスキーマ名として評価しようとはしません。単に
MY_FUNC2
は混乱しないので、うまくいきます。
ドキュメント 名前解決の説明 . 修飾されたオブジェクト名の最初の部分 - ここではS2 - は、異なるスキーマとして評価される前に、現在のスキーマ上のオブジェクトとして評価されます。
連続しないかもしれません。他のオブジェクトでも同じエラーが発生する可能性があります。データ辞書に問い合わせることで、同じ名前のオブジェクトが存在するかどうかを確認することができます。
select owner, object_type, object_name
from all_objects
where object_name = 'S2';
関連
-
オラクル表領域拡張の詳細
-
ORCALテンポラリーテーブルの作成と削除
-
PLSQLは、ローカルオラクルまたはリモートオラクルデータベースに接続し、ランダムスイッチ機能を実現します。
-
Oracle19c テーブルスペースの作成における落とし穴
-
オラクルのファジー・クエリーとその使い方
-
Navicat PremiumツールでOracleデータベースをMySQLに移行する
-
Oracle 11gのダウンロード、インストール、グラフィックチュートリアルを使用します。
-
Oracleのカンマ区切り文字列を複数行に分割したデータ例
-
Oracleで読み取り専用アカウントを作成する詳細手順
-
[解決済み] ORA-00955 "名前はすでに既存のオブジェクトによって使用されています"
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ORCALテンポラリーテーブルの作成と削除
-
IntelliJ DataGrip Oracle 11gリモート接続の手順
-
Oracle Logminer クイックスタート詳細
-
Oracleデッドロック検出クエリとその処理
-
sqlplusコマンドによるOracleデータベースへのさまざまなログイン方法
-
SQLPlusコマンドの使い方の説明
-
Oracle 11g R2 インストールチュートリアル フルバージョン
-
[解決済み] ORA-01461: LONG 値は、LONG 列への挿入にのみバインドできます-クエリー時に発生します。
-
[解決済み] Oracle 12c: TNS-12535: TNS:操作がタイムアウトしました。
-
[解決済み] ORA-00119: 無効な仕様 ORA-00132: 構文エラー