0

I have this code.

CREATE TABLE USERS(
  USERNAME NVARCHAR2(30),
  USER_TYPE VARCHAR2(13)
);
/

CREATE OR REPLACE TYPE OBJ_USER_TYPE IS OBJECT(
  USER_TYPE VARCHAR2(13),
  USER_LEVEL NUMBER(38, 0)
);
/

CREATE OR REPLACE TYPE OBJ_USER IS OBJECT(
  USERNAME NVARCHAR2(30),
  USER_TYPE OBJ_USER_TYPE
);
/

CREATE OR REPLACE TYPE NST_USERS IS TABLE OF OBJ_USER;
/

DECLARE
  objUser OBJ_USER NOT NULL DEFAULT OBJ_USER('MARION', OBJ_USER_TYPE('USER', 3));
  tblUSERS NST_USERS NOT NULL DEFAULT NST_USERS(objUser);
BEGIN
  INSERT INTO USERS(USERNAME, USER_TYPE)
  SELECT USERNAME, USER_TYPE.USER_TYPE
  FROM TABLE(tblUSERS);
END;
/

It raises an error of "invalid identifier" just like here.
But when I used:

INSERT INTO USERS(USERNAME, USER_TYPE)
SELECT USERNAME, TREAT(USER_TYPE AS OBJ_USER_TYPE).USER_TYPE
FROM TABLE(tblUSERS);

It raised error "too many values".
What's wrong with this code?

Community
  • 1
  • 1
marion-jeff
  • 759
  • 7
  • 13

1 Answers1

0
DECLARE
  objUser OBJ_USER ;
  tblUSERS NST_USERS;
BEGIN
  objUser := OBJ_USER('MARION', OBJ_USER_TYPE('USER', 3));
  tblUSERS := NST_USERS(objUser);

  INSERT INTO USERS(USERNAME, USER_TYPE)
    SELECT USERNAME, TREAT(USER_TYPE AS OBJ_USER_TYPE).USER_TYPE
     FROM
    TABLE(tblUSERS);

END;
/

Fiddle Demo

Maheswaran Ravisankar
  • 17,652
  • 6
  • 47
  • 69
  • Sorry but it's only a typo. I already edit it from USER_TYPE to OBJ_USER_TYPE. There's still an error. – marion-jeff Oct 02 '14 at 06:10
  • @marionjeff can you check my edit? .. I see your [updated Question behaves as you expected too](http://sqlfiddle.com/#!4/2491b/8)! What version of database are you using? – Maheswaran Ravisankar Oct 02 '14 at 06:20