2009-06-23 9 views

Respuesta

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; 

Esto funcionará siempre que el objeto PL/SQL no tenga AUTHID CURRENT_USER.

+0

Wow. Sabía de eso, pero esperaba que devolviera al usuario actual, no al usuario con el que se estaba ejecutando la función. ¡Gracias! –

1

Probablemente haya una manera más fácil, pero podría usar dbms_utility.format_call_stack y analizar los resultados para obtener el nombre del esquema. Esto funciona en Oracle 9i.

+0

Oracle 11 no muestra el usuario en el mensaje de error. – Victor

6

De Oracle 10g CURRENT_USER, como se usa en Gary Myers' answer, está obsoleto. Oracle recomienda que utilice el parámetro SESSION_USER en su lugar, que:

Para usuarios de empresas, devuelve el esquema. Para otros usuarios, devuelve el nombre de usuario de la base de datos por el cual se autentica al usuario actual. Este valor permanece igual durante toda la sesión.

Yo usaría CURRENT_SCHEMA. Hay diferencias sutiles entre los dos ya que CURRENT_SCHEMA cambia si se emite una declaración ALTER SESSION SET CURRENT_SCHEMA.

Tampoco es necesario SELECCIONAR desde dual; puede asignar el valor de retorno de SYS_CONTEXT directamente a la variable.

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

No es muy diferente, pero hay algunas razones distintas por las que no me gusta la otra respuesta. 1. No necesita seleccionar de dual en una variable, solo asigne. 2. CURRENT_USER está [en desuso] (http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions165.htm). 3. Existen diferencias menores pero distintas entre CURRENT_SCHEMA y SESSION_USER. –

+0

Lo suficientemente justo @Tom. No era consciente. He actualizado tu respuesta para reflejar todo esto. Por favor, eche un vistazo y vea si hay algo que le gustaría cambiar. – Ben

Cuestiones relacionadas