Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Вызов статического метода объекта и конструктор  [new]
Z.Denis
Member

Откуда: SPB.RUSSIA
Сообщений: 7
При попытке вызвать из динамического метода объекта статический метод объекта получаю ошибку компиляции (PLS-00225: subprogram or cursor 'string' reference is out of scope). Если при этом закомментарить конструктор, то ошибка пропадает. Добавление параметров конструктору ситуацию не меняют.

Как воспользовать статическим методом, имея конструктор?

Код (если закомментарить конструктор - будет компилироваться без ошибки):
create or replace type TST as object
(
 i NUMBER,
 
 ---------------
 CONSTRUCTOR FUNCTION TST RETURN SELF AS RESULT,
 ---------------

 MEMBER procedure memb (ip IN INTEGER),
 STATIC procedure memb_st (ip IN INTEGER)
)
/
create or replace type body TST is
 
-------------------- 
 CONSTRUCTOR FUNCTION TST RETURN SELF AS RESULT
 IS
 BEGIN
   NULL;
 END;
 ------------------

 MEMBER PROCEDURE memb (ip IN INTEGER)
 IS
 BEGIN
   TST.memb_st(1); -- вызываем статический метод
 END;
 
 STATIC PROCEDURE memb_st (ip IN INTEGER) 
 IS
 BEGIN
  NULL;
 END;
  
end;
/
7 апр 11, 18:49    [10487885]     Ответить | Цитировать Сообщить модератору
 Re: Вызов статического метода объекта и конструктор  [new]
-2-
Member

Откуда:
Сообщений: 15330
Z.Denis,

области видимости.
7 апр 11, 19:04    [10487928]     Ответить | Цитировать Сообщить модератору
 Re: Вызов статического метода объекта и конструктор  [new]
Z.Denis
Member

Откуда: SPB.RUSSIA
Сообщений: 7
-2-,
Не понял Вас. Области видимости чего?
Вот так компилируется без проблем:
create or replace type TST as object
(
 i NUMBER,
 
 MEMBER procedure memb (ip IN INTEGER),
 STATIC procedure memb_st (ip IN INTEGER)
)
/
create or replace type body TST is
 
 MEMBER PROCEDURE memb (ip IN INTEGER)
 IS
 BEGIN
   TST.memb_st(1); -- вызываем статический метод
 END;
 
 STATIC PROCEDURE memb_st (ip IN INTEGER) 
 IS
 BEGIN
  NULL;
 END;
  
end;
/
7 апр 11, 19:25    [10488000]     Ответить | Цитировать Сообщить модератору
 Re: Вызов статического метода объекта и конструктор  [new]
-2-
Member

Откуда:
Сообщений: 15330
Z.Denis
Области видимости чего?
TST вестимо. Если есть одноименный конструктор, то TST вызывает конструктор, если нет, то обращается к самому типу. Убери "TST." перед методом.
7 апр 11, 19:32    [10488027]     Ответить | Цитировать Сообщить модератору
 Re: Вызов статического метода объекта и конструктор  [new]
Z.Denis
Member

Откуда: SPB.RUSSIA
Сообщений: 7
-2-
Z.Denis
Области видимости чего?
TST вестимо. Если есть одноименный конструктор, то TST вызывает конструктор, если нет, то обращается к самому типу. Убери "TST." перед методом.

Так memb_st - это же статический метод. Без указания имени типа к нему не получить доступ. Будет "PLS-00587: a static method cannot be invoked on an instance value"
7 апр 11, 19:38    [10488049]     Ответить | Цитировать Сообщить модератору
 Re: Вызов статического метода объекта и конструктор  [new]
-2-
Member

Откуда:
Сообщений: 15330
Z.Denis
Без указания имени типа к нему не получить доступ. Будет "PLS-00587: a static method cannot be invoked on an instance value"
Ну да... Тогда указывать схему или create synonym "TST_not_a_constructor" for TST. Может в доке есть что-нибудь разумное.
7 апр 11, 19:56    [10488113]     Ответить | Цитировать Сообщить модератору
 Re: Вызов статического метода объекта и конструктор  [new]
Z.Denis
Member

Откуда: SPB.RUSSIA
Сообщений: 7
-2-,

С синонимом компилируется :) Красивый WorkAround. А то я уже наследованием начал обходить, перенеся статические методы в предка.
7 апр 11, 20:08    [10488157]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить