简体   繁体   中英

Oracle ALL_UPDATABLE_COLUMNS contents

I would like to understand the contents of the Oracle system table ALL_UPDATABLE_COLUMNS. The documentation says that

ALL_UPDATABLE_COLUMNS describes all columns in a join view that are updatable by the current user, subject to appropriate privileges.

I understand how some columns in join views cannot be updated, but to my surprise selecting from this table I found that regular tables and their columns are also listed here. Is there any scenario when a particular column of a regular table is not updatable? (assuming that I have the update rights on the table level)

There are cases where the columns of a table are not updatable. For example, if I create a virtual column (though this is only available starting in 11.1), I cannot update the data in that column

SQL> ed
Wrote file afiedt.buf

  1  create table foo (
  2    col1 number,
  3    col2 number generated always as (round(col1,2)) virtual
  4* )
SQL> /

Table created.

SQL> insert into foo( col1 ) values( 1.77665 );

1 row created.

SQL> select * from foo;

      COL1       COL2
---------- ----------
   1.77665       1.78

SQL> update foo set col2 = 2;
update foo set col2 = 2
       *
ERROR at line 1:
ORA-54017: UPDATE operation disallowed on virtual columns

Interestingly, though, all_updatable_columns incorrectly indicates that I can update the virtual column

SQL> ed
Wrote file afiedt.buf

  1  select column_name, updatable, insertable, deletable
  2    from all_updatable_columns
  3   where owner = 'SCOTT'
  4*    and table_name = 'FOO'
SQL> /

COLUMN_NAME                    UPD INS DEL
------------------------------ --- --- ---
COL1                           YES YES YES
COL2                           YES YES YES

If we restrict ourselves to Oracle 10g (per the tag), I don't believe that there is a way to define a column in a table that cannot be updated. You could put the entire table in a read-only tablespace which will prevent you from being able to update any column. But I wouldn't expect that to be reflected in all_updatable_columns .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM