powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Имя функции...
19 сообщений из 19, страница 1 из 1
Имя функции...
    #34104780
Dr. Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понимаю, что вопрос звучит несколько странно...

Может ли модуль (функция или процедура) как-нибудь, откуда-нибудь узнать своё имя во время выполнения? Думаю вряди, но вдруг...?
...
Рейтинг: 0 / 0
Имя функции...
    #34104805
Jannny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тынц
...
Рейтинг: 0 / 0
Имя функции...
    #34104834
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно проще:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
set serveroutput on
create or replace procedure proc_name is
v_name_proc varchar2( 30 ) default 'proc_name';
begin
 dbms_output.put_line(v_name_proc);
end;
/

execute proc_name;

SQL> set serveroutput on
SQL> create or replace procedure proc_name is
   2   v_name_proc varchar2( 30 ) default 'proc_name';
   3   begin
   4    dbms_output.put_line(v_name_proc);
   5   end;
   6   /

Процедура создана.

SQL> execute proc_name;
proc_name

Процедура PL/SQL успешно завершена.

Вы же как говорится сами процедуру ведь пишите
...
Рейтинг: 0 / 0
Имя функции...
    #34105479
Владимир Бегун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> CREATE OR REPLACE PROCEDURE p
   2   IS
   3   BEGIN
   4     dbms_output.put_line($$PLSQL_UNIT || ':' || TO_CHAR($$PLSQL_LINE));
   5   END;
   6   /

Процедура создана.

SQL> SET SERVEROUTPUT ON SIZE  10000 
SQL> EXEC p;
P: 4 

Процедура PL/SQL успешно завершена.
Разумеется, если версия Oracle позволяет (>=9.2.0.6). Для пакетов имя процедуры узнать не получится, но если номера строки достаточно, то это лучший способ добиться цели.
Код: plaintext
1.
2.
3.
-- 
Vladimir Begun       |  http://alexeymazanov.narod.ru/ 
The statements and opinions expressed here are my own
and do not necessarily represent those of Oracle.
...
Рейтинг: 0 / 0
Имя функции...
    #34107229
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Бегун
Код: plaintext
$$PLSQL_UNIT / $$PLSQL_LINE
Это команды SQL-плюса?
...
Рейтинг: 0 / 0
Имя функции...
    #34107246
Фотография dmidek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx Владимир Бегун
Код: plaintext
$$PLSQL_UNIT / $$PLSQL_LINE
Это команды SQL-плюса?

Нет, это Predefined Inquiry Directives

Using Predefined Inquiry Directives With Conditional Compilation
...
Рейтинг: 0 / 0
Имя функции...
    #34107303
Andrew Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Бегун
Код: plaintext
1.
SQL> CREATE OR REPLACE PROCEDURE p
...
Разумеется, если версия Oracle позволяет (>=9.2.0.6).
Владимир,

Ты хочешь сказать, что это может работать в 9.2.0.6? Каким образом?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
SQL> select * from v$version where rownum =  1 ;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release  9 . 2 . 0 . 6 . 0  - Production

SQL> CREATE OR REPLACE PROCEDURE ppp IS
   2   BEGIN
   3     dbms_output.put_line($$PLSQL_UNIT || ':' || TO_CHAR($$PLSQL_LINE));
   4   END;
   5   /

Warning: Procedure created with compilation errors.

SQL> show errors
Errors for PROCEDURE PPP:

LINE/COL ERROR
-------- -----------------------------------------------------------------
 3 / 24      PLS- 00103 : Encountered the symbol "$" when expecting one of the
         following:
         ( ) - + case mod new not null others <an identifier>
         <a double-quoted delimited-identifier> <a bind variable>
         table avg count current exists max min prior sql stddev sum
         variance execute multiset the both leading trailing forall
         merge year month DAY_ hour minute second timezone_hour
         timezone_minute timezone_region timezone_abbr time timestamp
         interval date
         <a string literal with character set specification>

До сегодняшнего дня полагал, что эта фича появилась в 10.2.
Я был неправ?
...
Рейтинг: 0 / 0
Имя функции...
    #34107337
Andrew Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrew MaxДо сегодняшнего дня полагал, что эта фича появилась в 10.2.
Насчет Release 2 я погорячился:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQL> create or replace procedure P is
   2   begin
   3     dbms_output.put_line($$PLSQL_UNIT || ':' || to_char($$PLSQL_LINE));
   4   end;
   5   /

Procedure created.

SQL> exec P
P: 3 

PL/SQL procedure successfully completed.

SQL> select * from v$version where rownum =  1 ;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release  10 . 1 . 0 . 4 . 0  - Prod

SQL>
...
Рейтинг: 0 / 0
Имя функции...
    #34107664
Владимир Бегун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrew MaxДо сегодняшнего дня полагал, что эта фича появилась в 10.2.
Я был неправ?
На metalink есть статья, которая рассказывает что нужно сделать
чтобы это всё заработало на 9.2.0.6. Статус её распространения я
не знаю, если public найдёшь сам, если нет -- в тех. поддержку.

Здесь достаточно подробное описание элементов работы условной
компиляции.
Код: plaintext
1.
2.
3.
-- 
Vladimir Begun       |  http://alexeymazanov.narod.ru/ 
The statements and opinions expressed here are my own
and do not necessarily represent those of Oracle.
...
Рейтинг: 0 / 0
Имя функции...
    #34141698
LVA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LVA
Гость
интересно, кому нибудь удалось найти на металинке эту статью ? мне - нет.
Кто нашел , киньте ссылку, плиз.
...
Рейтинг: 0 / 0
Имя функции...
    #34141709
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVAинтересно, кому нибудь удалось найти на металинке эту статью ? мне - нет.
Кто нашел , киньте ссылку, плиз.
Мне тоже :)
Но встречал в одной из презентаций, что начиная с 9.2.0.6 для партнеров-ISV (и их клиентов) условная компиляция включается через техподдержку.
Сделано для того, чтобы ISV уже сегодня могли использовать это дело в своих продуктах (иначе будут ждать распространения десятки)
...
Рейтинг: 0 / 0
Имя функции...
    #34141731
LVA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LVA
Гость
andrey_anonymous LVAинтересно, кому нибудь удалось найти на металинке эту статью ? мне - нет.
Кто нашел , киньте ссылку, плиз.
Мне тоже :)
Но встречал в одной из презентаций, что начиная с 9.2.0.6 для партнеров-ISV (и их клиентов) условная компиляция включается через техподдержку.
Сделано для того, чтобы ISV уже сегодня могли использовать это дело в своих продуктах (иначе будут ждать распространения десятки)



ясно.
спасибо.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Имя функции...
    #38143951
nmaqsudov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С хранимой процедурой или функцией нет вопросов, в вот с пакетами и типами:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
--- использование $$plsql_unit в пакете
create or replace package p1 is
  procedure u1;
end p1;

create or replace package body p1 is
  procedure u1 is
  begin
    dbms_output.put_line($$plsql_unit||': '||$$plsql_line);
  end;
end p1;

begin
  p1.u1; -- Печатает "P1: 4", а хотелось бы "P1.U1: 4"
end;



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
--- использование $$plsql_unit в типе
create or replace type t1 as object(
  f1 number,
  member procedure p1
);

create or replace type body t1 is
  member procedure p1 is
  begin
    dbms_output.put_line($$plsql_unit||': '||$$plsql_line);
  end;
end;

declare
  v_t1 t1 :=t1(123);
begin
  v_t1.p1;  -- Печатает "T1: 4", а хотелось бы "T1.P1: 4"
end;



Как получить и название программной единицы и имя лежащего глубже пакетного или объектного метода?
...
Рейтинг: 0 / 0
Имя функции...
    #38143964
nmaqsudov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин! Том Кайт знает всё:

Huberto -- Thanks for the question regarding "Who Am I -> determine the procedure/function within a package", version 8.1.6

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select text 
  from all_source 
 where ( upper(text) like '%PROCEDURE%' 
         or 
         upper(text) like '%FUNCTION%' )
   and line < :that_line_number
   and owner = :that_owner
   and name = :that_name
 order by line desc
...
Рейтинг: 0 / 0
Имя функции...
    #38143973
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nmaqsudovБлин! Том Кайт знает всё:

Huberto -- Thanks for the question regarding "Who Am I -> determine the procedure/function within a package", version 8.1.6

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select text 
  from all_source 
 where ( upper(text) like '%PROCEDURE%' 
         or 
         upper(text) like '%FUNCTION%' )
   and line < :that_line_number
   and owner = :that_owner
   and name = :that_name
 order by line desc


просто он устал от таких как вы отбиваться (имхо)
...
Рейтинг: 0 / 0
Имя функции...
    #38143984
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select text 
  from all_source 
 where ( upper(text) like '%PROCEDURE%' 
         or 
         upper(text) like '%FUNCTION%' )
   and line < :that_line_number
   and owner = :that_owner
   and name = :that_name
 order by line desc

недостоверный результат как в сторону no_data_found, так и too_many_rows.
Единстванная практическая задача - это определение, не себя любимого, а кто тебя вызвал для унивесализации процедур логирования. Для чего есть стек вызов.
C 2006го несколько версий утекло и можно еще добавить к способам v$session.plsql_xxx
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Имя функции...
    #39311479
vox22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения за некропостинг, но в до 11 версии включительно имя пакетной процедуры в стектрейс не пишется. Только пакет и номер строки.

А рыться в all_source не вариант для логгирования - медленно очень.

Кайт в вышеприведенной ссылке советует вычислять имя функции по строке потом, при анализе лога, если понадобится.

В общем одна надежда на UTL_CALL_STACK и переезд на 12.
...
Рейтинг: 0 / 0
Имя функции...
    #39311482
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vox22,

Каждые пару недель какой-то юный исследователь поднимает тему.
19621564

В 12-ке улучшений в плане отображения в call stack программной единицы в пакете нет.
Читай как это делать по ссылке.
...
Рейтинг: 0 / 0
Имя функции...
    #39311506
vox22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хмм, а Кайт вот пишет что UTL_Call_Stack.Subprogram как раз то что нужно.

За ссылку спасибо, попробую.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Имя функции...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]