Saves the schema cache of a database to an operating system file. Subsequent sessions can then share the same cache by using the Schema Cache File (-cache) parameter.

Syntax

SAVE CACHE 
    { CURRENT | COMPLETE }
    {database-name| VALUE ( char-expr ) }
  TO
    {pathname|  VALUE ( char-expr ) }
[ NO-ERROR ]
CURRENT
Specifies that only the portion of the schema cache that applies to referenced tables is saved to the file. By using this option you can tailor a small schema cache file for an application that does not use all the tables in the database.
COMPLETE
Specifies that the complete schema cache for the database is saved to the file. If you use this option, the client process builds a complete schema cache in memory including template records and all trigger information for every table in the database.
database-name
Specifies the literal logical name of a currently connected OpenEdge database.
pathname
Specifies the literal pathname of an operating system file to hold the schema cache. In Windows, the pathname cannot contain characters outside of the non-Unicode code page. See Internationalize ABL Applications for more information about Unicode and code pages.
VALUE (char-expr)
Returns the corresponding literal database name or pathname specified by the character expression in char-expr.
NO-ERROR
The NO-ERROR option is used to prevent the statement from raising ERROR and displaying error messages.

Example

This procedure saves the complete schema cache for each database that you specify in the current working directory, and displays any error messages associated with connecting or saving the cache:

r-schcsh.p

DEFINE VARIABLE db-name AS CHARACTER NO-UNDO FORMAT "x(12)" INITIAL ?.
DEFINE VARIABLE icnt    AS INTEGER   NO-UNDO.

DO WHILE db-name <> "":
 SET db-name LABEL "Database Name" 
   WITH FRAME A SIDE-LABELS TITLE "Save Cache" VIEW-AS DIALOG-BOX.
 IF db-name <> "" THEN 
   CONNECT VALUE(db-name) -1 NO-ERROR.
 ELSE LEAVE.

 IF NOT ERROR-STATUS:ERROR THEN DO:
   SAVE CACHE COMPLETE VALUE(db-name) TO VALUE(db-name + ".csh") NO-ERROR.
   IF NOT ERROR-STATUS:ERROR THEN
     MESSAGE "Saved schema cache for" db-name "in" db-name + ".csh.".
   ELSE DO:
     BELL.
     DO icnt = 1 TO ERROR-STATUS:NUM-MESSAGES:
       MESSAGE ERROR-STATUS:GET-MESSAGE(icnt) VIEW-AS ALERT-BOX.
     END.
   END.
 END.
 ELSE DO:
   BELL.
   DO icnt = 1 TO ERROR-STATUS:NUM-MESSAGES:
     MESSAGE ERROR-STATUS:GET-MESSAGE(icnt) VIEW-AS ALERT-BOX.
   END.
 END.
 DISCONNECT VALUE(db-name) NO-ERROR.
END.

Notes

  • The schema cache is saved to the file in a binary format that is portable across machines.
  • For information on using an existing schema cache file, see Manage the OpenEdge Database. For information on the Schema Cache File (-cache) startup parameter, see Startup Command and Parameter Reference.
  • Any schema changes to the database make the saved cache invalid. If the schema cache file is invalid when the AVM tries to access it, the AVM displays a warning message, ignores the file, and reads the required schema cache from the database.
  • To set up your database environment to use the CURRENT option, you only have to connect to the database and read from the tables that compose the schema you want to save. This is sufficient for the SAVE CACHE statement to save all parts of each table in the schema, including template records and trigger information. If you want to save a different subschema of the database, you must disconnect and then reconnect to the database before reading the tables for that subschema.
  • For a DataServer, the AVM saves the schema cache for the entire schema holder database. You cannot save the schema cache for a non-OpenEdge database separately. For more information on schema cache files for DataServers, see the OpenEdge DataServer Guides (Use the Microsoft SQL Data Server and Use the Oracle Data Server).

See also

CONNECT statement, ERROR-STATUS system handle, NO-ERROR option