Присвойте значение переменной ref oracle - PullRequest
0 голосов
/ 18 апреля 2020

hHey, я хочу установить значение значения присваивания в методе node_ty. Однако я получаю сообщение об ошибке, что навигация по переменным Ref недопустима или тип, который я хочу назначить, неверен. Так что я не знаю, как это сделать. Не могли бы вы помочь мне с этим?

CREATE OR REPLACE TYPE property_ty AS OBJECT(
name VARCHAR2(100)
);
/

CREATE OR REPLACE TYPE assignment_ty AS OBJECT(
value VARCHAR2(100),
property REF property_ty
);
/

CREATE OR REPLACE TYPE property_tty AS TABLE OF property_ty;
/


CREATE OR REPLACE TYPE node_ty AS OBJECT(
x NUMBER,
y NUMBER,
assignment REF assignment_ty,
property property_tty,
MEMBER PROCEDURE set_assignment (name VARCHAR2, value VARCHAR2)
);
/
CREATE OR REPLACE TYPE BODY node_ty AS
    MEMBER PROCEDURE set_assignment (name VARCHAR2, value VARCHAR2) AS
    prop_not_added EXCEPTION;
    prop_exists BOOLEAN := FALSE;
    assig_test assignment_ty;
    prop property_ty;
    BEGIN
        FOR i IN 1..self.property.COUNT
        LOOP
            IF property(i).name = name THEN
               prop.name :=name;
               assig_test.value :=value;
               assig_test.property := prop;
               assignment := assig_test;
               prop_exists := TRUE;

            END IF;
        END LOOP;

        IF prop_exists = FALSE THEN
            RAISE prop_not_added;
        END IF;

        EXCEPTION
            WHEN prop_not_added THEN
            DBMS_OUTPUT.PUT_LINE('Property cannot be set');
    END;
END;
/

1 Ответ

0 голосов
/ 19 апреля 2020

Вы должны создать необходимую настройку и затем запросить данные из настройки. Я даю только настройку, отличную от вашей. Остальное вы можете оставить такой же, как и у вашей настройки

   create table t00 of property_ty;
   insert into t00 values('san');

   create table t0 of assignment_ty;
   insert into t0 select 'xxx',REF(p) from t00 p;

   CREATE OR REPLACE TYPE node_ty AS OBJECT(
    x NUMBER,
    y NUMBER,
    assignment REF assignment_ty,
    property property_tty,
    MEMBER PROCEDURE set_assignment (p_name VARCHAR2, p_value VARCHAR2)
    );

   create or replace TYPE BODY node_ty AS
MEMBER PROCEDURE set_assignment (p_name  VARCHAR2, p_value  VARCHAR2) AS
prop_not_added EXCEPTION;
prop_exists BOOLEAN := FALSE;
assig_test REF  assignment_ty;
prop1 property_ty;
prop REF property_ty;
BEGIN

    FOR i IN 1..self.property.COUNT
    LOOP
        IF property(i).name = p_name THEN

         SELECT REF(a) INTO assignment FROM t0 a,t00 b where a.value=p_value and b.name=p_name
         and ref(b)=property;

           prop_exists := TRUE;

        END IF;
    END LOOP;

    IF prop_exists = FALSE THEN
        RAISE prop_not_added;
    END IF;

    EXCEPTION
        WHEN prop_not_added THEN
        DBMS_OUTPUT.PUT_LINE('Property cannot be set');
END;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...