Skip Headers

Oracle9i SQL Reference
Release 2 (9.2)

Part Number A96540-01
Go To Documentation Library
Go To Product List
Book List
Go To Table Of Contents
Go To Index

Master Index


Go to previous page Go to beginning of chapter Go to next page

SQL Statements: SAVEPOINT to UPDATE, 8 of 8



Use the UPDATE statement to change existing values in a table or in a view's base table.

Additional Topics


For you to update values in a table, the table must be in your own schema or you must have UPDATE privilege on the table.

For you to update values in the base table of a view:

The UPDATE ANY TABLE system privilege also allows you to update values in any table or any view's base table.

You must also have the SELECT privilege on the object you want to update if:



Text description of statements_1026.gif follows
Text description of update

(DML_table_expression_clause::=, update_set_clause::=, where_clause::=, returning_clause::=)


Text description of statements_1027.gif follows
Text description of DML_table_expression_clause

(subquery::=--part of SELECT syntax, subquery_restriction_clause::=, table_collection_expression::=)


Text description of statements_1028.gif follows
Text description of subquery_restriction_clause


Text description of statements_1032a.gif follows
Text description of table_collection_expression


Text description of statements_105.gif follows
Text description of update_set_clause


Text description of statements_102.gif follows
Text description of where_clause


Text description of statements_1030.gif follows
Text description of returning_clause

Keywords and Parameters


Specify a comment that passes instructions to the optimizer on choosing an execution plan for the statement.

You can place a parallel hint immediately after the UPDATE keyword to parallelize both the underlying scan and UPDATE operations.

See Also:


The ONLY clause applies only to views. Specify ONLY syntax if the view in the UPDATE clause is a view that belongs to a hierarchy and you do not want to update rows from any of its subviews.

See Also:

"Restrictions on the dml_table_expression_clause:" and "Updating a Table: Examples"


Specify the schema containing the table or view. If you omit schema, then Oracle assumes the table or view is in your own schema.

table | view | subquery

Specify the name of the table or view, or the columns returned by a subquery, to be updated. Issuing an UPDATE statement against a table fires any UPDATE triggers associated with the table. If you specify view, then Oracle updates the view's base table.

If table (or the base table of view) contains one or more domain index columns, then this statement executes the appropriate indextype update routine.

See Also:

Oracle9i Data Cartridge Developer's Guide for more information on these routines

PARTITION (partition) | SUBPARTITION (subpartition)

Specify the name of the partition or subpartition within table targeted for updates. You need not specify the partition name when updating values in a partitioned table. However in some cases specifying the partition name can be more efficient than a complicated where_clause.

See Also:

"Updating a Partition: Example"


Specify a complete or partial name of a database link to a remote database where the table or view is located. You can use a database link to update a remote table or view only if you are using Oracle's distributed functionality.

If you omit dblink, then Oracle assumes the table or view is on the local database.

See Also:

"Referring to Objects in Remote Databases" for information on referring to database links


Use the subquery_restriction_clause to restrict the subquery in one of the following ways:


Specify WITH READ ONLY to indicate that the table or view cannot be updated.


Specify WITH CHECK OPTION to indicate that Oracle prohibits any changes to the table or view that would produce rows that are not included in the subquery.

CONSTRAINT constraint

Specify the name of the CHECK OPTION constraint. If you omit this identifier, Oracle automatically assigns the constraint a name of the form SYS_Cn, where n is an integer that makes the constraint name unique within the database.

See Also:

"Using the WITH CHECK OPTION Clause: Example"


The table_collection_expression lets you inform Oracle that the value of collection_expression should be treated as a table for purposes of query and DML operations. The collection_expression can be a subquery, a column, a function, or a collection constructor. Regardless of its form, it must return a collection value (that is, a value whose type is nested table or varray). This process of extracting the elements of a collection is called collection unnesting.


In earlier releases of Oracle, when collection_expression was a subquery, table_collection_expression was expressed as "THE subquery". That usage is now deprecated.

You can use a table_collection_expression to update rows in one table based on rows from another table. For example, you could roll up four quarterly sales tables into a yearly sales table.


Specify a correlation name (alias) for the table, view, or subquery to be referenced elsewhere in the statement.


This alias is required if the dml_table_expression_clause references any object type attributes or object type methods.

See Also:

"Correlated Update: Example"

Restrictions on the dml_table_expression_clause:


The update_set_clause lets you set column values.


Specify the name of a column of the table or view that is to be updated. If you omit a column of the table from the update_set_clause, then that column's value remains unchanged.

If column refers to a LOB object attribute, then you must first initialize it with a value of empty or null. You cannot update it with a literal. Also, if you are updating a LOB value using some method other than a direct UPDATE SQL statement, then you must first lock the row containing the LOB.

See Also:


If column is part of the partitioning key of a partitioned table, then UPDATE will fail if you change a value in the column that would move the row to a different partition or subpartition, unless you enable row movement.

See Also:

the row_movement_clause of CREATE TABLE or ALTER TABLE

In addition, if column is part of the partitioning key of a list-partitioned table, then UPDATE will fail if you specify a value for the column that does not already exist in the partition_value list of one of the partitions.


Specify a subquery that returns exactly one row for each row updated.

You can use the flashback_clause of within the subquery to update table with past data.

See Also:

the flashback_clause of SELECT for more information on this clause

If the subquery returns no rows, then the column is assigned a null.


If this subquery refers to remote objects, then the UPDATE operation can run in parallel as long as the reference does not loop back to an object on the local database. However, if the subquery in the dml_table_expression_clause refers to any remote objects, then the UPDATE operation will run serially without notification.

See Also:

Specify an expression that resolves to the new value assigned to the corresponding column.

See Also:

Chapter 4, "Expressions" for the syntax of expr and "Using the SET VALUE Clause: Example"


Specify DEFAULT to set the column to the value previously specified as the default value for the column. If no default value for the corresponding column has been specified, then Oracle sets the column to null.

Restriction on setting default values: You cannot specify DEFAULT if you are updating a view.

VALUE Clause

The VALUE clause lets you specify the entire row of an object table.

Restriction on the VALUE clause: You can specify this clause only for an object table.


If you insert string literals into a RAW column, during subsequent queries, then Oracle will perform a full table scan rather than using any index that might exist on the RAW column.

See Also:

"Using the SET VALUE Clause: Example"


The where_clause lets you restrict the rows updated to those for which the specified condition is true. If you omit this clause, then Oracle updates all rows in the table or view.

The where_clause determines the rows in which values are updated. If you do not specify the where_clause, then all rows are updated. For each row that satisfies the where_clause, the columns to the left of the equals (=) operator in the update_set_clause are set to the values of the corresponding expressions on the right. The expressions are evaluated as the row is updated.

See Also:

Chapter 5, "Conditions" for the syntax of condition


The returning clause retrieves the rows affected by a DML (INSERT, UPDATE, or DELETE) statement. You can specify this clause for tables and materialized views, and for views with a single base table.

When operating on a single row, a DML statement with a returning_clause can retrieve column expressions using the affected row, rowid, and REFs to the affected row and store them in host variables or PL/SQL variables.

When operating on multiple rows, a DML statement with the returning_clause stores values from expressions, rowids, and REFs involving the affected rows in bind arrays.


Each item in the expr list must be a valid expression syntax. All forms are valid except scalar subquery expressions.


The INTO clause indicates that the values of the changed rows are to be stored in the variable(s) specified in data_item list.


Each data_item is a host variable or PL/SQL variable that stores the retrieved expr value.

For each expression in the RETURNING list, you must specify a corresponding type-compatible PL/SQL variable or host variable in the INTO list.



Updating a Table: Examples

The following statement gives null commissions to all employees with the job SA_CLERK:

UPDATE employees 
   SET commission_pct = NULL 
   WHERE job_id = 'SA_CLERK'; 

The following statement promotes Douglas Grant to manager of Department 20 with a $1,000 raise:

UPDATE employees SET 
    job_id = 'SA_MAN', salary = salary + 1000, department_id = 120 
    WHERE first_name||' '||last_name = 'Douglas Grant'; 

The following statement increases the balance of bank account number 5001 in the accounts table on a remote database accessible through the database link boston:

UPDATE finance.accounts@boston 
    SET balance = balance + 500 
    WHERE acc_no = 5001; 

The next example shows the following syntactic constructs of the UPDATE statement:

The preceding UPDATE statement performs the following operations:

Updating a Partition: Example

The following example updates values in a single partition of the sales table:

UPDATE sales PARTITION (sales_q1_1999) s
   SET s.promo_id = 494
   WHERE amount_sold > 9000;
Using the SET VALUE Clause: Example

The following statement updates a row of object table table1 by selecting a row from another object table table2:

UPDATE table1 p SET VALUE(p) =
   (SELECT VALUE(q) FROM table2 q WHERE =
   WHERE = 10;

The subquery uses the value object reference function in its expression.

Correlated Update: Example

The following example updates particular rows of the projs nested table corresponding to the department whose department equals 123:

           FROM dept d WHERE d.dno = 123)  p 
  SET p.budgets = p.budgets + 1 
  WHERE p.pno IN (123, 456);
Using the RETURNING Clause During UPDATE: Example

The following example returns values from the updated row and stores the result in PL/SQL variables bnd1, bnd2, bnd3:

UPDATE employees
  SET job_id ='SA_MAN', salary = salary + 1000, department_id = 140
  WHERE last_name = 'Jones'
  RETURNING salary*0.25, last_name, department_id
    INTO :bnd1, :bnd2, :bnd3;

Go to previous page Go to beginning of chapter Go to next page
Copyright © 1996, 2002 Oracle Corporation.

All Rights Reserved.
Go To Documentation Library
Go To Product List
Book List
Go To Table Of Contents
Go To Index

Master Index