Deletes an instance of a persistent procedure. The persistent procedure can be local or
        remote.
     
    Syntax
      
      
          
          
            
              
                DELETE PROCEDURE proc-handle[ NO-ERROR ] 
               | 
            
          
        
 
      
        
          - 
            proc-handle
          
 
          - The handle of a local or remote persistent procedure. This is a
            variable, field, or expression of type HANDLE that contains a valid persistent procedure
              handle.
For a proxy procedure handle, this statement deletes the
              handle immediately unless there is an outstanding asynchronous request on this handle
                (handle:ASYNC-REQUEST-COUNT is greater than zero (0)). If handle:ASYNC-REQUEST-COUNT is greater than zero (0), this statement raises the
                ERROR condition. Otherwise, the statement also
              sends a request to the application server to delete the corresponding remote
              persistent procedure on the application server. If the application server is executing
              any asynchronous requests ahead of it, the AVM queues the delete request (as with any
              asynchronous remote request) until the application server is available to handle
              it.
Note: This same behavior occurs if the remote
              procedure deletes itself (using DELETE...THIS-PROCEDURE) on the application server.
 
        
        
          - NO-ERROR
 
          - The NO-ERROR option is used to prevent the statement from raising ERROR
            and displaying error messages.
 
        
      
     
    Example
      
      When you run the following procedure non-persistently, the procedure
        creates a persistent instance of itself in addition to the non-persistent instance, creating
        two query windows for the Customer table. Choosing the Cancel button in either window causes
        the instance that owns that window to terminate. If the instance you terminate is
        persistent, the Cancel button runs an internal procedure that executes the DELETE
          PROCEDURE statement for that instance as specified by the
          THIS-PROCEDURE system handle.
      
        r-delprc.p 
      
      
          
          
            
              
                DEFINE QUERY custq FOR Customer.
DEFINE BROWSE custb QUERY custq
  DISPLAY name balance phone WITH 10 DOWN.
DEFINE BUTTON bName LABEL "Query on Name".
DEFINE BUTTON bBalance LABEL "Query on Balance".
DEFINE BUTTON bCancel LABEL "Cancel".
DEFINE FRAME CustFrame custb SKIP bName bBalance bCancel.
DEFINE VARIABLE custwin AS HANDLE.
ON CHOOSE OF bName IN FRAME CustFrame DO:
  custwin:TITLE = "Customers by Name".
  OPEN QUERY custq FOR EACH Customer BY Customer.Name.
END.
ON CHOOSE OF bBalance IN FRAME CustFrame DO:
  custwin:TITLE = "Customers by Balance".
  OPEN QUERY custq FOR EACH Customer BY Customer.Balance DESCENDING.
END.
IF THIS-PROCEDURE:PERSISTENT THEN DO:
  THIS-PROCEDURE:PRIVATE-DATA = "Customer Browse".
  CREATE WIDGET-POOL.
END.
CREATE WINDOW custwin ASSIGN
  TITLE            = IF THIS-PROCEDURE:PERSISTENT THEN
    "Persistent Customer Browser" ELSE "Customer Browser"
  SCROLL-BARS      = FALSE
  MAX-HEIGHT-CHARS = FRAME CustFrame:HEIGHT-CHARS
  MAX-WIDTH-CHARS  = FRAME CustFrame:WIDTH-CHARS.
THIS-PROCEDURE:CURRENT-WINDOW = custwin.
ENABLE ALL WITH FRAME CustFrame.
IF THIS-PROCEDURE:PERSISTENT THEN DO:
  ON CHOOSE OF bCancel IN FRAME CustFrame DO:
    RUN destroy-query.
  END.
END.
ELSE DO:
  RUN r-delprc.p PERSISTENT. 
  WAIT-FOR CHOOSE OF bCancel IN FRAME CustFrame.
  DELETE WIDGET custwin.
END.
PROCEDURE destroy-query:
  DELETE PROCEDURE THIS-PROCEDURE.
  DELETE WIDGET-POOL.
END PROCEDURE. 
               | 
            
          
        
 
     
    Notes
      
      
        - To be valid for deletion, proc-handle
          must reference an active persistent procedure. You can use the
            VALID-HANDLE function and PERSISTENT procedure attribute to
          check the validity of proc-handle. Thus, both
            VALID-HANDLE(proc-handle) and
            proc-handle:PERSISTENT must be TRUE
          to delete the specified procedure. If either of these expressions is FALSE, the
            DELETE PROCEDURE statement raises the ERROR
          condition.
 
        - When you delete a persistent procedure instance, its context goes out of
          scope and all allocated resources are returned to the system. In addition, it is removed
          from the chain of persistent procedures referenced by the FIRST-PROCEDURE
          and LAST-PROCEDURE attributes of the SESSION system
          handle.
 
        - If you delete a persistent procedure instance while executing statements
          within that procedure, the DELETE PROCEDURE statement pends until the
          largest executing block in the persistent procedure terminates. Thus, if the
            DELETE PROCEDURE occurs while the main procedure block is executing
          (when the persistent procedure is called), the procedure is deleted when the procedure
          returns (as if it were non-persistent). If the DELETE PROCEDURE occurs
          during execution of a trigger or execution of an internal procedure that is called from
          another external procedure, the procedure is deleted after the trigger block or internal
          procedure returns. Note that while the delete is pending, the persistent procedure remains
          valid in the persistent procedure chain.
 
        - The DELETE PROCEDURE statement will
          only delete the proxy handle on the client of a procedure run as single-run or singleton.
          This is because the AVM automatically deletes a single-run procedure after execution, and
          a singleton procedure may be running on multiple Progress Application Server (PAS) for
          OpenEdge instances.
 
        - The DELETE PROCEDURE statement disconnects any local
          buffers established by the procedure. In addition, any buffers passed as parameters to a
          persistent procedure are treated as local buffers. While all cursor positioning
          established on these buffers by the persistent procedure is lost, there is no affect on
          the original buffers passed as parameters from the caller. Note that all buffers are
          validated before being disconnected (which might cause database write triggers to
          execute). If the validation fails, the DELETE PROCEDURE statement raises
          the ERROR condition and pends the deletion until the validation succeeds
          and all database write triggers have completed.