HP 3000 Manuals

ALTER TABLE [ ALLBASE/SQL Reference Manual ] MPE/iX 5.5 Documentation


ALLBASE/SQL Reference Manual

ALTER TABLE 
[REV BEG]

The ALTER TABLE statement is used to add one or more new columns or
constraints, to drop one or more constraints, or to reassign the table
audit partition.[REV END] This statement is also used to change the type
of table access, updatability, and locking strategies.  New columns are
appended following already existing columns of a table.  New column
definitions must either allow null values or provide default values if
the table is not empty.  Added columns may specify constraints.

Scope 

ISQL or Application Programs

SQL Syntax 

                              {AddColumnSpecification     }
                              {AddConstraintSpecification }
ALTER TABLE [Owner.]TableName {DropConstraintSpecification}
                              {SetTypeSpecification       }
                              {SetPartitionSpecification  }
Parameters--ALTER TABLE 

[Owner.]TableName         designates the table to be altered.

AddColumnSpecification    allows a new column to be added to an existing
                          table.  This parameter is discussed in a
                          separate section below.

AddConstraintSpecificationallows a new constraint to be added to an
                          existing table.  This parameter is discussed in
                          a separate section below.

DropConstraintSpecificationllows an existing constraint to be dropped
                          from an existing table.  This parameter is
                          discussed in a separate section below.

SetTypeSpecification      allows the locking mode of the table and
                          related authorities to be changed.  This
                          parameter is discussed in a separate section
                          below.

SetPartitionSpecification allows a table or DBEnvironment partition to be
                          changed.

SQL Syntax--AddColumnSpecification 

ADD{(ColumnDefinition [,...] )} [CLUSTERING ON CONSTRAINT [ConstraintID]]
   {Column Definition         }
Parameters--AddColumnSpecification 

ColumnDefinition        The syntax of ColumnDefinition is presented under
                        the CREATE TABLE statement.
                        [REV BEG]

CLUSTERING ON           specifies that the named unique or referential
CONSTRAINT              constraint specified within the Column Definition
                        be managed through a clustered index structure
                        rather than nonclustered.  The unique
                        constraint's unique column list, or referential
                        constraint's referencing column list, becomes the
                        clustered key.[REV END]

ConstraintID            specifies the unique or referential constraint on
                        which clustering is to be applied.  If not
                        specified, the primary key of the table is
                        assumed.  The ConstraintID must be for a
                        constraint being added with the ALTER TABLE
                        statement.

SQL Syntax--AddConstraintSpecification 
[REV BEG]

                {UniqueConstraint     }
ADD CONSTRAINT ({ReferentialConstraint} [,...] )
                {CheckConstraint      }

[CLUSTERING ON CONSTRAINT [ConstraintID1]]
[REV END]

Parameters--AddConstraintSpecification 

UniqueConstraint        defines a unique constraint being added.  This
                        parameter is described under the CREATE TABLE
                        statement.

ReferentialConstraint   defines a referential constraint being added.
                        This parameter is described under the CREATE
                        TABLE statement.

CheckConstraint         defines a check constraint being added.  This
                        parameter is described under the CREATE TABLE
                        statement.[REV BEG]

CLUSTERING ON           specifies that the named unique or referential
CONSTRAINT              constraint be managed through a clustered index
                        structure rather than nonclustered.  The unique
                        constraint's unique column list, or referential
                        constraint's referencing column list, becomes the
                        clustered key.

ConstraintID1           specifies the unique or referential constraint
                        name on which clustering is to be applied.  If
                        not specified, the primary key of the table is
                        assumed.  ConstraintID1 must be for a constraint
                        being added with the ALTER TABLE statement.[REV
                        END]

SQL Syntax--DropConstraintSpecification 

DROP CONSTRAINT{(ConstraintID [,...] )}
               {ConstraintID          }
Parameters--DropConstraintSpecification 

ConstraintID            is the name of the constraint optionally defined
                        when the constraint was defined.

SQL Syntax--SetTypeSpecification 

         {PRIVATE   }
SET TYPE {PUBLICREAD} [RESET AUTHORITY   ]
         {PUBLIC    } [PRESERVE AUTHORITY]
         {PUBLICROW }
Parameters--SetTypeSpecification 

PRIVATE                 enables the table to be used by only one
                        transaction at a time.  Locks are applied at the
                        table level.  This is the most efficient option
                        for tables that do not need to be shared because
                        ALLBASE/SQL spends less time managing locks.

                        If RESET AUTHORITY is specified, the option
                        automatically revokes all authorities on the
                        table from PUBLIC. Otherwise, the authority on
                        the table remains unchanged.

PUBLICREAD              enables the table to be read by concurrent
                        transactions, but allows no more than one
                        transaction at a time to update the table.  Locks
                        are applied at the table level.

                        If RESET AUTHORITY is specified, the option
                        automatically issues GRANT SELECT on
                        Owner.TableName to PUBLIC, and revokes all other
                        authorities on the table from PUBLIC. Otherwise,
                        the authority on the table remains unchanged.

PUBLIC                  enables the table to be read and updated by
                        concurrent transactions.  The locking unit is a
                        page.  A transaction locks a page in share mode
                        before reading it and in exclusive mode before
                        updating it.

                        If RESET AUTHORITY is specified, the option
                        automatically issues GRANT ALL on Owner.TableName 
                        to PUBLIC. Otherwise, the authority on the table
                        remains unchanged.

PUBLICROW               enables the table to be read and updated by
                        concurrent transactions.  The locking unit is a
                        row.  A transaction locks a row in share mode
                        before reading it and in exclusive mode before
                        updating it.

                        If RESET AUTHORITY is specified, the option
                        automatically issues GRANT ALL on Owner.TableName 
                        to PUBLIC. Otherwise, the authority on the table
                        remains unchanged.

RESET AUTHORITY         is used to indicate that the authority on the
                        table should be changed to reflect the new table
                        type.  If not specified, the authority on the
                        table remains unchanged.

PRESERVE AUTHORITY      is used to indicate that the authority currently
                        in effect on the table should be preserved.  This
                        is the default.

SQL Syntax--SetPartitionSpecification 

              {PartitionName}
SET PARTITION {DEFAULT      }
              {NONE         }
Parameters--SetPartitionSpecification 

PartitionName           specifies the new partition of the table.

DEFAULT                 specifies the new partition of the table to be
                        the default partition of the DBEnvironment.  If
                        the default partition number is later changed,
                        that change will automatically be recorded the
                        next time an INSERT, UPDATE, or DELETE operation
                        is executed on the table.  If the default
                        partition is NONE at that time, audit logging of
                        the operation is not done.

NONE                    specifies that the table is no longer in any
                        partition.  No further audit logging will be done
                        on the table.

Description 

   *   Unless the table is currently empty, you cannot specify the NOT
       NULL attribute for any new columns unless you specify a default
       value.

   *   If no DEFAULT clause is given for an added column, an implicit
       DEFAULT NULL is assumed.  Any INSERT statement which does not
       include a column for which a default has been declared causes the
       default value to be inserted into that column for all rows
       inserted.

   *   All rows currently in the table are updated with the default value
       for any new column which specifies default values.

   *   The ALTER TABLE statement can invalidate stored sections.

   *   Character strings are accepted as date/time default values.

   *   If an added constraint is violated when it is defined, an error
       message is immediately issued and the ALTER TABLE statement has no
       effect.

   *   A unique constraint referenced by a FOREIGN KEY cannot be dropped
       without first dropping the referential constraint.

   *   Constraints being added in AddConstraintSpecification must be on
       existing columns of the table.

   *   The ALTER TABLE statement can be used to change the type of an
       existing table.  Changing the type of a table redefines the
       locking strategy that ALLBASE/SQL uses when the table is accessed.
       You can decide whether to use page or row level locking for your
       applications.

   *   No other transaction can access the table until the transaction
       that issued the ALTER TABLE statement has committed.

   *   The type of a table is changed permanently when you issue a COMMIT
       WORK statement.

   *   When altering the type of an existing table, you can also specify
       the option to preserve existing authority on the table or change
       the authority to the default for the new table type.  If you
       specify RESET AUTHORITY, the following changes are made to the
       table authority:

          Table 10-2.  Changes to Table Authority in ALTER TABLE 

--------------------------------------------------------------------------
-  Old Table Type   -  New Table Type   -      Changes to Authority      -
--------------------------------------------------------------------------
- PRIVATE           - PUBLIC            - Grant ALL to PUBLIC            -
-                   - PUBLICROW         - Grant ALL to PUBLIC            -
-                   - PUBLICREAD        - Grant SELECT to PUBLIC         -
--------------------------------------------------------------------------
- PUBLICREAD        - PUBLIC            - Grant ALL to PUBLIC            -

-                   - PUBLICROW         - Grant ALL to PUBLIC            -
-                   - PRIVATE           - Revoke ALL from PUBLIC         -
--------------------------------------------------------------------------
- PUBLIC            - PUBLICROW         - No change                      -
-                   - PUBLICREAD        - Revoke ALL from PUBLIC         -
-                   -                   - Grant SELECT to PUBLIC         -
-                   - PRIVATE           - Revoke ALL from PUBLIC         -
--------------------------------------------------------------------------
- PUBLICROW         - PUBLIC            - No change                      -
-                   - PUBLICREAD        - Revoke ALL from PUBLIC         -
-                   -                   - Grant SELECT to PUBLIC         -
-                   - PRIVATE           - Revoke ALL from PUBLIC         -
--------------------------------------------------------------------------

   *   To indicate that a table is in no partition, the partition NONE
       can be specified.

   *   The PartitionName specified must be one previously defined in a
       CREATE PARTITION statement, must be the DEFAULT partition, or must
       be specified as NONE.

   *   Changing the partition number of the table causes all future audit
       logging on the table to use the new partition number.  Past audit
       log records will not be altered to reflect a change in a table's
       partition number; that is, the effect of this statement is not
       retroactively applied to existing log records.  If NONE was
       specified, there will be no more audit logging done on this table
       (until another ALTER TABLE SET PARTITION statement is issued on
       the table).

   *   When specifiying CLUSTERING ON CONSTRAINT, an error is returned if
       the table is already clustered on a constraint or index or if the
       table is hashed.

   *   Adding a clustered constraint does not affect the physical
       placement of rows already in the table.

   *   See syntax for the CREATE TABLE and CREATE INDEX statements for
       more information on clustering.

Authorization 

You can issue this statement if you have ALTER or OWNER authority for the
table or if you have DBA authority.

To define added referential constraints, the table owner must have
REFERENCES authority on the referenced table and referenced columns, own
the referenced table, or have DBA authority.

To specify a DBEFileSetName for a long column, the table owner must have
TABLESPACE authority on the referenced DBEFileSet.

To specify a DBEFileSetName for a check constraint, the section owner
must have SECTIONSPACE authority on the referenced DBEFileSet.

Examples 

Two new columns, ShippingWeight and PartDescription, are added to table
PurchDB.Parts.  ShippingWeight must be greater than 0.

     ALTER TABLE PurchDB.Parts
            ADD (ShippingWeight DECIMAL(6,3) CHECK (ShippingWeight > 0) 
            CONSTRAINT Check_Weight, 
            PartDescription CHAR(40)) 

A constraint is added to table PurchDB.Parts to ensure that the sales
price is greater than $100.

     ALTER TABLE PurchDB.Parts
            ADD CONSTRAINT CHECK (SalesPrice > 100.) CONSTRAINT Check_Price 

A column named DiscountPercent is added to table PurchDB.OrderItems, with
a default value of 0 percent.

     ALTER TABLE PurchDB.OrderItems
            ADD (DiscountPercent FLOAT DEFAULT 0) 

The constraint named Check_Price is dropped.

     ALTER TABLE PurchDB.Parts
            DROP CONSTRAINT Check_Price 

The type of a table is changed:

     ALTER TABLE PurchDB.OrderItems
            SET TYPE PUBLICROW 

The table's partition is modified to be partition PartsPart2.

     ALTER TABLE PurchDB.Parts
            SET PARTITION PartsPart2; 

No more audit logging will be done on the table.

     ALTER TABLE PurchDB.Parts
            SET PARTITION NONE; 



MPE/iX 5.5 Documentation