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

パッケージ仕様で関数を宣言せずに、パッケージ内のSQLクエリで関数を呼び出すとエラーが発生する

    前方宣言とはまったく関係ありません。

    これは、SQLクエリを使用して関数を呼び出すという事実に対処します。 。ステートメントを使用して関数を呼び出すと、PL / SQLパッケージのスコープ内にいなくなったため、公開されている関数しか呼び出すことができないようです。

    理由は 、推測しかできないので、当然のこととは思わないでください。ただし、 PL/SQLとSQLのエンジンは異なります 。したがって、SQLクエリを実行するときは、pl / sqlパッケージ内であっても、SQLのレベルに移動し、SQLエンジンに従ってアクセス許可を再度チェックします。したがって、PL / SQLパッケージ内から実行されることはわかりません。また、プライベート関数の呼び出しを許可する必要があります。

    エンジンの違いは簡単に確認できると思います。32000のvarchar2を使用してみてください。これは、pl/sql関数内で機能します。ここで、pl / sql関数を呼び出すと、varchar2(32000)が返されます。 、失敗します。これは私が遭遇した問題ですが、スニペットを提供するためのデータベースがありません。



    1. PDO ::lastInsertIdが0を返すのはなぜですか?

    2. JavaからファイルDSNにアクセスする

    3. mysql WHERE MATCH AGAINST

    4. IRI WorkbenchでのInformix(IDS12 DB)への接続