0

Say I have 2 objects MY_OBJ, MY_NESTED_TABLE_OBJ

CREATE OR REPLACE TYPE MY_NESTED_TABLE_OBJ IS TABLE OF VARCHAR2(100);

CREATE OR REPLACE TYPE MY_OBJ AS OBJECT (
    simple_atribute NUMBER(6),
    table_attribute MY_NESTED_TABLE_OBJ,
    MEMBER PROCEDURE doStuff(text VARCHAR2)
) NOT FINAL INSTANTIABLE;

MY_OBJ's table

CREATE TABLE TBL_MY_OBJ OF MY_OBJ
(  CONSTRAINT PK_simple_atribute PRIMARY KEY(simple_atribute))
NESTED TABLE table_attribute STORE AS attribute_nst;

How do I insert a VARCHAR2(100) into the nested table belonging to table_attribute?? What is the sintax??

Doing a simple insert like: INSERT INTO attribute_nst VALUES ('some text'); gives the error

cannot reference nested table column's storage table

What i want is to do insert from within PROCEDURE doStuff(text VARCHAR2), i've tried:

INSERT INTO SELF.attribute_nst VALUES (text);
INSERT INTO attribute_nst VALUES (text);
INSERT INTO table_attribute VALUES (text);

...and other combination and no nothing, so please help!

2 Answers 2

3
SQL> CREATE OR REPLACE TYPE BODY MY_OBJ AS
  2    member procedure doStuff(text varchar2) is
  3    begin
  4      table_attribute.extend(1);
  5      table_attribute(table_attribute.count) := text;
  6    end;
  7  end;
  8  /

Type body created.

SQL> declare
  2     l_my_obj My_Obj := My_Obj(1,MY_NESTED_TABLE_OBJ());
  3  begin
  4    l_my_obj.doStuff('abc');
  5    l_my_obj.doStuff('def');
  6
  7    insert into tbl_my_obj values (l_my_obj);
  8  end;
  9  /

PL/SQL procedure successfully completed.

SQL> select * from tbl_my_obj;

SIMPLE_ATRIBUTE
---------------
TABLE_ATTRIBUTE
------------------------------------------------------------
              1
MY_NESTED_TABLE_OBJ('abc', 'def')
Sign up to request clarification or add additional context in comments.

Comments

0

Try this
insert into tbl_my_obj values (1, new my_nested_table_obj(text1, text2));

1 Comment

I do not want that. im thinking in a object oriented maner, I (X) am a instance of MY_OBJ... I have a method (procedure) doStuff(text VARCHAR2).... by using X.doStuff('a string') -> the 'a string' shoud go in my nested table

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.