Oracle 10gデータベースにPL/SQLパッケージがあり、パッケージ(およびそのファンクション)が使用するスキーマの名前を戻すファンクションを作成したいとします。 )が定義されています。誰でもこれを行う方法を知っていますか?ファンクション内からPL/SQLファンクションのスキーマを判断する方法
答えて
create function xcurr return varchar2 is
v_curr varchar2(32);
begin
SELECT SYS_CONTEXT ('USERENV', 'CURRENT_USER') into v_curr from dual;
return v_curr;
end;
これは、PL/SQLオブジェクトにAUTHID CURRENT_USERが設定されていない限り機能します。
おそらく簡単な方法がありますが、dbms_utility.format_call_stack
を使用して結果を解析してスキーマ名を取得できます。これはOracle 9iで機能します。
Oracle 11では、エラーメッセージが表示されません。 – Victor
Gary Myers' answerで使用されているOracle 10g CURRENT_USERより、推奨されていません。代わりに、SESSION_USERパラメータを使用することをお薦めします。
エンタープライズ・ユーザーの場合、スキーマを戻します。他のユーザーの場合は、現在のユーザーが認証されるデータベースユーザー名を と返します。 この値は、セッションの期間中は変わりません。
私はCURRENT_SCHEMAを使用します。 ALTER SESSION SET CURRENT_SCHEMA
ステートメントが発行された場合、CURRENT_SCHEMAが変更されるため、この2つの間に微妙な違いがあります。
デュアルから選択する必要もありません。 SYS_CONTEXTの戻り値を変数に直接割り当てることができます。
DECLARE
v_current_schema varchar2(30);
BEGIN
v_current_schema := SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA');
dbms_output.put_line('I am using the schema [' || v_current_schema || ']');
END;
それほど違いはありませんが、他の答えが気に入らないという明確な理由がいくつかあります。 1.デュアルから変数に選択する必要はありません。割り当てするだけです。 2. CURRENT_USERは(http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions165.htm)[非推奨]れます。 3. CURRENT_SCHEMAとSESSION_USERの間には小さな違いがあります。 –
十分な@トム。私は知らなかった。私はこのすべてを反映するためにあなたの答えを更新しました。あなたが変更したいことがあれば見てみてください。 – Ben
- 1. 廃止予定のPLSQLプロシージャ/ファンクションのコード
- 2. ファンクションと 'ファンクション'コンストラクタ
- 3. ファンクションに同じ型(ファンクション)のファンクションを返すようにする方法はありますか?
- 4. ファンクションとファンクションの違い
- 5. ファンクション・パラメータの取得方法
- 6. ファンクションはReact-Router内のファンクションではありません
- 7. ファンクションを延期する方法
- 8. ファイヤーベースでファンクションを追加する方法
- 9. デリゲートからファンクションにキャスト
- 10. ファンクション内でファンクタを定義する方法
- 11. MONTHS_BETWEENファンクション
- 12. this.textファンクション
- 13. mysqli_num_rowsファンクション
- 14. CloudファンクションとFirebaseファンクションの違いは何ですか?
- 15. ファンクションを使用すると、「ファンクション・ソース・コード」になり、評価されたファンクション値にはなりませんか?
- 16. java - ファンクションのクラス
- 17. smtpファンクションのFget
- 18. Pythonのハイブリッドジェネレータ/ファンクション
- 19. jsファンクションとしてJSONのjsファンクションを解析します。
- 20. ファンクション内でコールバックを呼び出す
- 21. FireFox Comファンクション
- 22. AzureファンクションBLOBバインド
- 23. Apache Pig AVGファンクション
- 24. PL/SQLファンクション・パラメータ
- 25. ケース・ステートメント/ファンクション
- 26. ファンクション付きファンクションコンポーネント
- 27. MouseMoveファンクションとモジュール
- 28. ファンクション属性returns_twice
- 29. ブランチ付きファンクション
- 30. Swift FirebaseファンクションReturn
うわー。私はそれについて知っていましたが、関数が実行されていたユーザーではなく、現在のユーザーを返すことを期待していました。ありがとう! –