sql >> データベース >  >> RDS >> Oracle

PLS-00302を取得するのはなぜですか:コンポーネントは存在するときに宣言する必要がありますか?

    スキーマと同じ名前のオブジェクトがある場合、このエラーが発生する可能性があります。例:

    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';
    


    1. 文字列から数値のみを取得するためのクエリ

    2. ORACLESQLlistagg関数

    3. MySQLまたはMariaDBデータベースに接続する方法

    4. ORDER BY DATEは、最初にNULLSを表示し、次に最新の日付を表示します