Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Имя функции... / 19 сообщений из 19, страница 1 из 1
03.11.2006, 16:35:31
    #34104780
Dr. Simon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя функции...
Понимаю, что вопрос звучит несколько странно...

Может ли модуль (функция или процедура) как-нибудь, откуда-нибудь узнать своё имя во время выполнения? Думаю вряди, но вдруг...?
...
Рейтинг: 0 / 0
03.11.2006, 16:43:16
    #34104805
Jannny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя функции...
тынц
...
Рейтинг: 0 / 0
03.11.2006, 16:51:15
    #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
04.11.2006, 07:48:43
    #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
06.11.2006, 15:41:47
    #34107229
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя функции...
Владимир Бегун
Код: plaintext
$$PLSQL_UNIT / $$PLSQL_LINE
Это команды SQL-плюса?
...
Рейтинг: 0 / 0
06.11.2006, 15:58:16
    #34107246
dmidek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя функции...
andreymx Владимир Бегун
Код: plaintext
$$PLSQL_UNIT / $$PLSQL_LINE
Это команды SQL-плюса?

Нет, это Predefined Inquiry Directives

Using Predefined Inquiry Directives With Conditional Compilation
...
Рейтинг: 0 / 0
06.11.2006, 16:28:19
    #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
06.11.2006, 16:48:19
    #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
06.11.2006, 20:28:51
    #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
20.11.2006, 17:17:11
    #34141698
LVA
LVA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя функции...
интересно, кому нибудь удалось найти на металинке эту статью ? мне - нет.
Кто нашел , киньте ссылку, плиз.
...
Рейтинг: 0 / 0
20.11.2006, 17:20:32
    #34141709
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя функции...
LVAинтересно, кому нибудь удалось найти на металинке эту статью ? мне - нет.
Кто нашел , киньте ссылку, плиз.
Мне тоже :)
Но встречал в одной из презентаций, что начиная с 9.2.0.6 для партнеров-ISV (и их клиентов) условная компиляция включается через техподдержку.
Сделано для того, чтобы ISV уже сегодня могли использовать это дело в своих продуктах (иначе будут ждать распространения десятки)
...
Рейтинг: 0 / 0
20.11.2006, 17:27:04
    #34141731
LVA
LVA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя функции...
andrey_anonymous LVAинтересно, кому нибудь удалось найти на металинке эту статью ? мне - нет.
Кто нашел , киньте ссылку, плиз.
Мне тоже :)
Но встречал в одной из презентаций, что начиная с 9.2.0.6 для партнеров-ISV (и их клиентов) условная компиляция включается через техподдержку.
Сделано для того, чтобы ISV уже сегодня могли использовать это дело в своих продуктах (иначе будут ждать распространения десятки)



ясно.
спасибо.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
08.02.2013, 18:22:51
    #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
08.02.2013, 18:31:08
    #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
08.02.2013, 18:38:25
    #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
08.02.2013, 18:48:35
    #38143984
-2-
-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
Период между сообщениями больше года.
19.09.2016, 19:10:30
    #39311479
vox22
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя функции...
Прошу прощения за некропостинг, но в до 11 версии включительно имя пакетной процедуры в стектрейс не пишется. Только пакет и номер строки.

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

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

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

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

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

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


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