हे, मैं नोड_टी की विधि में असाइनमेंट मान का मान सेट करना चाहता हूं। हालांकि मुझे त्रुटि मिलती है कि रेफ चर के माध्यम से नेविगेशन की अनुमति नहीं है या जिस प्रकार को मैं असाइन करना चाहता हूं वह सही नहीं है। तो मैं वास्तव में नहीं जानता कि यह कैसे करें। क्या आप इसमें मेरी मदद कर सकते हैं?

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;
/
0
mboy 18 अप्रैल 2020, 20:19

1 उत्तर

सबसे बढ़िया उत्तर

आपको आवश्यक सेटअप बनाना है और फिर सेटअप से डेटा को क्वेरी करना है। मैं केवल वही सेटअप दे रहा हूं जो आपके से अलग है। शेष आप इसे अपने सेटअप के समान रख सकते हैं

   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;
0
psaraj12 19 अप्रैल 2020, 16:45