Tengo un paquete PL/SQL en una base de datos Oracle 10g y quiero escribir una función que devuelva el nombre del esquema que el paquete (y por lo tanto la función) se define en. ¿Alguien sabe cómo hacer esto?Cómo determinar el esquema de una función PL/SQL desde la función
Respuesta
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.
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.
Oracle 11 no muestra el usuario en el mensaje de error. – Victor
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;
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. –
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
- 1. Como lee cadena desde la derecha PLSQL
- 2. Cómo determinar el nombre de la función dentro de una función
- 3. ¿Cómo declarar una variable dentro de una función de esquema?
- 4. ¿Cómo determinar si la variable es una función en Python?
- 5. Llamar a una función desde una cadena con el nombre de la función en Clojure
- 6. ¿Cómo devolver una matriz desde una función?
- 7. determinar el comportamiento de la función del tipo de la función
- 8. ¿Cómo regreso desde una función dentro de una lambda?
- 9. ¿Cómo devolver diferentes clases desde una función?
- 10. Devolver objeto desde la función
- 11. Cómo escribir una función PL/SQL tiene un parámetro similar a la función más grande
- 12. Función de una función
- 13. Necesito llamar a la función original desde la función desviada
- 14. Cómo llamar a la función de JavaScript desde el servlet
- 15. ¿Cómo puedo determinar si una función genera un gráfico
- 16. Carga dinámicamente una función desde una DLL
- 17. Cómo devolver el valor varchar desde una función
- 18. ¿Cómo graficar la función de densidad probabilística de una función?
- 19. explícitamente determinar qué función pura de usar
- 20. php is_function() para determinar si una variable es una función
- 21. Cómo imprimir el nombre de la función como una cadena en Python desde el interior de esa función
- 22. Devolución de matrices/punteros desde una función
- 23. Función de llamada jQuery desde una cadena
- 24. Función de esquema de desplazamiento como una lista
- 25. ¿Cómo aplico una función anónima de una lista en el esquema?
- 26. JQUERY + devolver una matriz desde una función
- 27. devolver una clase abstracta desde una función
- 28. C++ plantilla determinar función return tipo
- 29. Acceder a una función dentro de una función (función anidada?)
- 30. Llamar a una función de Javascript desde la consola
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! –