Как упоминалось @APC, невозможно напрямую использовать member
функцию Object
для другой, используя REF
, поскольку Oracle поддерживает их в SQL, но не в PL / SQL.
Однако, если я посмотрю на ваше требование под другим углом, я пойму, что вы пытаетесь просто использовать процедуру, используемую в объекте, для другого объекта.Означает, что если я забуду ссылающуюся часть и создам сценарий, который мог бы удовлетворить концепцию обращения, тогда он должен "ОК".
Это возможно.Да..!!!Это можно сделать.Единственное, что я сделал здесь, это сделал два Объекта родительскими и дочерними для достижения referencing
.См. Демонстрацию ниже:
--Parent Object
CREATE OR REPLACE TYPE t_abonnement_type AS OBJECT
(
ref_abonnement_type NUMBER,
type_abonne VARCHAR(50),
MEMBER FUNCTION DISPLAY return varchar2
) NOT FINAL;
-- Member Funtion Body
CREATE OR REPLACE TYPE BODY t_abonnement_type
AS
MEMBER FUNCTION DISPLAY
return varchar2
IS
BEGIN
return ('Hi');
END DISPLAY;
END;
Тестирование моего родительского объекта:
SQL> SELECT t_abonnement_type(1,'a').display() col from DUAL;
COL
---
Hi
Дочерний объект для достижения ссылки concept
CREATE OR REPLACE TYPE t_abonnement
under t_abonnement_type
(
ref_abonnement NUMBER,
date_debut DATE,
MEMBER function V_DISPLAY return varchar2
);
--Member function
CREATE OR REPLACE TYPE BODY t_abonnement
AS
MEMBER Function V_DISPLAY return varchar2
IS
var varchar2(10);
BEGIN
var:= t_abonnement_type(1,'A').display(); --Calling Parent Member function here
return('Called from Child Object -->'||var);
END;
END;
Тестирование моегоДочерний объект, чтобы проверить, есть ли ссылка на родительский элемент Member function
:
SQL> SELECT T_ABONNEMENT(1,'A',2,TO_DATE('30-JUN-2018','DD-MON-YYYY')).V_DISPLAY() COL FROM DUAL;
Col
---
Called from Child Object -->Hi
Примечание. Я не использовал перегрузку, выполненную в вашем коде, поскольку я чувствую, что перегрузка усложняет понимание материала как отдельного человекакак для компилятора.