HP 3000 Manuals

DELETE WHERE CURRENT [ ALLBASE/SQL Reference Manual ] MPE/iX 5.5 Documentation


ALLBASE/SQL Reference Manual

DELETE WHERE CURRENT 

The DELETE WHERE CURRENT statement deletes the current row of an active
set.  The current row is the row pointed to by a cursor after the FETCH
or REFETCH statement is issued.

Scope 

Application Programs

SQL Syntax 

DELETE FROM {[Owner.]TableName} WHERE CURRENT OF CursorName 
            {[Owner.]ViewName }
Parameters 

[Owner.]TableName       designates the table from which you are deleting
                        a row.

[Owner.]ViewName        designates a view based on a single table.
                        ALLBASE/SQL finds the row of the base table
                        corresponding to the row of the view indicated by
                        the cursor, and deletes the row from the base
                        table.  Refer to the CREATE VIEW statement for
                        restrictions governing modifications via a view.

CursorName              specifies the name of a cursor.  The cursor must
                        be open and positioned on a row of the table.
                        The DELETE WHERE CURRENT statement deletes this
                        row, leaving the cursor with no current row.
                        (The cursor is said to be positioned between the
                        preceding and following rows of the active set).
                        You cannot use the cursor for further updates or
                        deletions until you reposition it using a FETCH
                        statement, or until you close and reopen the
                        cursor.

Description 

   *   This statement cannot be used interactively.

   *   Although the SELECT statement associated with the cursor may
       specify only some of the columns in a table, the DELETE WHERE
       CURRENT statement deletes an entire row.

   *   The DELETE WHERE CURRENT statement can be used on an active set
       associated with a cursor defined using the FOR UPDATE clause.

   *   Do not use this statement in conjunction with rows retrieved using
       a BULK FETCH.

   *   Using the DELETE statement with the WHERE CURRENT OF CURSOR clause
       requires that the cursor be defined on the basis of an updatable
       query.  See "Updatability of Queries" in the "SQL Queries"
       chapter.

   *   The target table of the DELETE WHERE CURRENT statement is
       specified with TableName or is the base table underlying ViewName.
       The base table restrictions that govern deletions via cursors are
       presented in the description of the DECLARE CURSOR statement.

   *   If a referential constraint should be violated during processing
       of the DELETE statement, the row is not deleted (unless error
       checking is deferred and the violation is corrected before you
       COMMIT WORK). Refer to the discussion of the SET CONSTRAINTS
       statement in this chapter for more information.

   *   A deletion from a table with a primary key (a referenced unique
       constraint) will fail if any primary key row affected by the
       DELETE statement is currently referred to by some referencing
       foreign key row.  In order to delete such referenced rows, you
       must first change the referencing foreign key rows to refer to
       other primary key rows, to contain a NULL value in one of the
       foreign key columns, or to delete these referencing rows.
       Alternatively, you can defer error checking (with the SET
       CONSTRAINT statement) and fix the error later.

   *   The DELETE syntax is unchanged for use with LONG columns.  When
       LONG data is deleted, the space it occupied in the DBEnvironment
       is released when your transaction ends.  But the physical
       operating system data file created when you selected the long
       field earlier still exists and you are responsible for removing it
       if you desire.

   *   A rule defined with a StatementType of DELETE will affect DELETE
       WHERE CURRENT statements performed on the rule's target table.
       When the DELETE WHERE CURRENT is performed, each rule defined on
       that operation for the table is considered.  If the rule has no
       condition, it will fire and invoke its associated procedure with
       the specified parameters on the current row.  If the rule has a
       condition, it will evaluate the condition and fire if the
       condition evaluates to TRUE and invoke the associated procedure
       with the specified parameters on the current row.  Invoking the
       procedure could cause other rules, and thus other procedures, to
       be invoked if statements within the procedure trigger other rules.

   *   If a DISABLE RULES statement is in effect, the DELETE WHERE
       CURRENT statement will not fire any otherwise applicable rules.
       When a subsequent ENABLE RULES is issued, applicable rules will
       fire again, but only for subsequent DELETE WHERE CURRENT
       statements, not for those rows processed when rule firing was
       disabled.

   *   In a rule defined with a StatementType of DELETE, any column
       reference in the Condition or any ParameterValue will refer to the
       value of the column as it exists in the database before it is
       removed by the DELETE WHERE CURRENT statement, regardless of the
       use of OldCorrelationName, TableName, or NewCorrelationName in the
       rule definition.

   *   When a rule is fired by this statement, the rule's procedure is
       invoked after the changes have been made to the database for that
       row.  The rule's procedure, and any chained rules, will thus see
       the state of the database with the current partial execution of
       the statement.

   *   If an error occurs during processing of any rule considered during
       execution of this statement (including execution of any procedure
       invoked due to a rule firing), the statement and any procedures
       invoked by any rules will have no effect.  Nothing will have been
       altered in the DBEnvironment as a result of this statement or the
       rules it fired.  Error messages are returned in the normal way.

Authorization 

If you specify the name of a table, you must have DELETE or OWNER
authority for that table or you must have DBA authority.

If you specify the name of a view, you must have DELETE or OWNER
authority for that view or you must have DBA authority.  Also, the owner
of the view must have DELETE or OWNER authority with respect to the
view's base tables, or the owner must have DBA authority.

Example 

The active set of this cursor will contain values for the OrderNumber
stored in :OrdNum.

     DECLARE DeleteItemsCursor CURSOR FOR
      SELECT ItemNumber,OrderQty FROM PurchDB.OrderItems
       WHERE OrderNumber = :OrdNum

Statements setting up a FETCH-DELETE WHERE CURRENT loop appear here.

     OPEN DeleteItemsCursor

Statements for displaying values and requesting whether the user wants to
delete the associated row go here.

     FETCH DeleteItemsCursor INTO :Lin :Linnul, :Orq :Orqnul

        DELETE FROM PurchDB.OrderItems WHERE CURRENT OF DeleteItemsCursor 
     :
     CLOSE DeleteItemsCursor



MPE/iX 5.5 Documentation