To use UPDATE, the alias must also be used:
SQL>
SQL> CREATE OR REPLACE TYPE ADDRESS_OBJ as OBJECT(
2 street VARCHAR2(20),
3 city VARCHAR2(20),
4 state CHAR(2),
5 zip CHAR(5))
6 /
Type created.
SQL>
SQL> CREATE TABLE emp (
2 empno NUMBER(3),
3 name VARCHAR2(20),
4 address ADDRESS_OBJ)
5 /
Table created.
SQL>
SQL> INSERT INTO emp VALUES (101, 'A',ADDRESS_OBJ('1 St.','M','AL','36608'));
1 row created.
SQL>
SQL> select * from emp;
EMPNO NAME ADDRESS(STREET, CITY, STATE, ZIP)
---------- -------------------- --------------------------------------------------
101 A ADDRESS_OBJ('1 St.', 'M', 'AL', '36608')
SQL>
SQL> UPDATE emp e
2 SET e.address.zip = '34210'
3 WHERE e.address.city LIKE 'A%'
4
SQL> select * from emp;
EMPNO NAME ADDRESS(STREET, CITY, STATE, ZIP)
---------- -------------------- --------------------------------------------------
101 A ADDRESS_OBJ('1 St.', 'M', 'AL', '36608')
SQL>
SQL> drop table emp;
Table dropped.
SQL> drop type ADDRESS_OBJ;
Type dropped.
SQL>