Как определить схему функции PL / SQL из функции - PullRequest
7 голосов
/ 23 июня 2009

У меня есть пакет PL / SQL в базе данных Oracle 10g, и я хочу написать функцию, которая возвращает имя схемы, в которой определен пакет (и, следовательно, функция). Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

7 голосов
/ 24 июня 2009
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.

6 голосов
/ 08 мая 2012

Из Oracle 10g CURRENT_USER , используемый в ответ Гэри Майерса , устарел. Oracle рекомендует использовать вместо этого параметр SESSION_USER, который:

Для корпоративных пользователей возвращает схему. Для других пользователей возвращается имя пользователя базы данных, с помощью которого аутентифицируется текущий пользователь. Это значение остается неизменным на протяжении всего сеанса.

Я бы использовал CURRENT_SCHEMA. Между CURRENT_SCHEMA есть небольшие различия, когда изменяется оператор ALTER SESSION SET CURRENT_SCHEMA.

Нет необходимости выбирать из двойного; Вы можете присвоить возвращаемое значение 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 голос
/ 24 июня 2009

Возможно, есть более простой способ, но вы можете использовать dbms_utility.format_call_stack и проанализировать результаты, чтобы получить имя схемы. Это работает в Oracle 9i.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...