2009-06-23 2 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

오라클 11은 사용자에게 오류 메시지를 표시하지 않습니다. – Victor

6

Gary Myers' answer에서 사용되는 Oracle 10g CURRENT_USER부터 사용되지 않습니다. 대신 SESSION_USER 매개 변수를 사용하는 것이 좋습니다.

기업 사용자의 경우 스키마를 반환합니다. 다른 사용자의 경우 현재 사용자가 인증 된 데이터베이스 사용자 이름 을 반환합니다. 이 값은 세션 기간 동안 동일하게 유지됩니다.

나는 CURRENT_SCHEMA를 사용합니다. ALTER SESSION SET CURRENT_SCHEMA 문을 발행하면 CURRENT_SCHEMA가 변경되어이 두 명령 사이에 약간의 차이가 있습니다.

이중에서도 SELECT 할 필요가 없습니다. 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

공정한 @Tom. 나는 몰랐다. 이 모든 것을 반영하도록 답변을 업데이트했습니다. 한번보세요. 변경하고 싶은 것이 있는지 확인하십시오. – Ben

관련 문제