2009-06-23 12 views

答えて

7
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が設定されていない限り機能します。

+0

うわー。私はそれについて知っていましたが、関数が実行されていたユーザーではなく、現在のユーザーを返すことを期待していました。ありがとう! –

1

おそらく簡単な方法がありますが、dbms_utility.format_call_stackを使用して結果を解析してスキーマ名を取得できます。これはOracle 9iで機能します。

+0

Oracle 11では、エラーメッセージが表示されません。 – Victor

6

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; 
+0

それほど違いはありませんが、他の答えが気に入らないという明確な理由がいくつかあります。 1.デュアルから変数に選択する必要はありません。割り当てするだけです。 2. CURRENT_USERは(http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions165.htm)[非推奨]れます。 3. CURRENT_SCHEMAとSESSION_USERの間には小さな違いがあります。 –

+0

十分な@トム。私は知らなかった。私はこのすべてを反映するためにあなたの答えを更新しました。あなたが変更したいことがあれば見てみてください。 – Ben

関連する問題