pl/sqlは初めてです。PROC1という名前のプロシージャを作成しましたが、同じ名前のプロシージャを作成している別の人と私のプロシージャがオーバーライドされる場合。同じ名前のプロシージャproc1をオーバーライドしない解決策はありますか?
2 に答える
その人が「プロシージャの作成...」を訴えるプロシージャを作成すると、もちろん警告が表示されますが、「プロシージャの作成または置換...」ではエラーは発生しません。あ、はい、
スタンドアロン プロシージャは、テーブル、ビュー、シーケンス、プライベート シノニム、スタンドアロン プロシージャ、スタンドアロン ストアド関数、パッケージ、マテリアライズド ビュー、およびユーザー定義型と名前空間を共有します。これらのタイプは、関数の作成を妨げます。
ただし、これは通常は問題ではなく、オブジェクト名に TAB や FNC などのプレフィックスを付ける必要はありません。これらのオブジェクトの適切に構成された名前は、通常、オブジェクトのタイプを指すためです。USERS (複数名詞 -> テーブル)、CREATE_INVOICE (ACTION + NOUN -> 手続き)、ACTIVE_USERS (形容詞 + 名詞 -> ビュー)
ただし、同じ名前で仕様が異なる複数のプロシージャがあり、それらがパッケージで定義されている場合は問題なく共存できます。すべての手順がスタンドアロンではなく、パッケージの一部として存在するという強い議論があります。
注意事項:
名前が付けられたプロシージャ
PROC1
がスキーマに存在する場合、他のプロシージャ/関数にPROC1
スキーマ内の名前を付けることはできません。ただし、同じ名前のパッケージを作成でき、その中に name の関数/プロシージャを作成できますPROC1
。PROC1
他のユーザーのスキーマで名前が付けられたパブリック シノニムがありPROC1
、CALL PROC1
、 などを指定すると、他のプロシージャの代わりに独自のプロシージャが呼び出されます。を呼び出すとPROC1
、プロシージャではなく、独自のオブジェクトにアクセスします。プロシージャを呼び出しても変更されません。
CREATE OR REPLACE PROCEDURE proc1
それを自分のバージョンに置き換えるには、スキーマで使用する必要があります。