Library /sys$common/syshlp/RDOHELP72.HLB  —  DEFINE_STORAGE_MAP, Examples
    Example 1

    The following statement defines a storage map for the employees
    relation in MF_PERSONNEL.

    DEFINE STORAGE MAP EMPLOYEES_MAP
       DESCRIPTION IS /* EMPLOYEES partitioned by EMPLOYEE_ID */
       FOR EMPLOYEES RELATION
     STORE USING EMPLOYEE_ID
      WITHIN
       EMPIDS_LOW WITH LIMIT OF "00200";
       EMPIDS_MID WITH LIMIT OF "00400";
       EMPIDS_OVER
    END EMPLOYEES_MAP STORAGE MAP.

    Example 2

    The following example shows how to define a storage map that
    stores all records from a relation in the named storage area:

    RDO>  DEFINE STORAGE MAP SALARY_HISTORY_MAP
    cont>  DESCRIPTION IS /* Map for salary history records */
    cont>  FOR SALARY_HISTORY RELATION
    cont>   STORE WITHIN SALARY_HISTORY
    cont> END SALARY_HISTORY_MAP STORAGE MAP.

    This statement stores all the records from the SALARY_HISTORY
    relation into the storage area, SALARY_HISTORY. SALARY_HISTORY
    is the name of a storage area that was created with the DEFINE
    DATABASE statement.

    Example 3

    The following example uses the PLACEMENT VIA INDEX clause to
    store records in a storage area according to a hashed index:

    RDO>   DEFINE STORAGE MAP DEPARTMENTS_MAP
    cont>    FOR DEPARTMENTS RELATION
    cont>    STORE WITHIN DEPARTMENTS
    cont>    PLACEMENT VIA INDEX DEPARTMENTS_INDEX
    cont>  END DEPARTMENTS_MAP STORAGE MAP.

    Example 4

    The following example defines a database and two relations that
    contain segmented strings. The two relations are mapped along
    with their segmented strings to separate storage areas.

    DEFINE DATABASE SEGSTR_0
      DESCRIPTION IS
      /*
      This database is used to show the Oracle Rdb
      segmented string support.  Two relations that contain
      segmented strings are mapped along with their segmented
      string data to separate storage areas.
      */
      DICTIONARY IS NOT USED

      DEFINE STORAGE AREA RDB$SYSTEM
        FILENAME 'SEGSTR_0'
      END

      DEFINE STORAGE AREA SEGSTR_1
        FILENAME 'SEGSTR_1'
      END

      DEFINE STORAGE AREA SEGSTR_2
        FILENAME 'SEGSTR_2'
      END

      DEFINE STORAGE AREA SEGSTR_SS1
        FILENAME 'SEGSTR_SS1'
      END

      DEFINE STORAGE AREA SEGSTR_SS2
        FILENAME 'SEGSTR_SS2'
      END

      SEGMENTED STRING STORAGE AREA IS SEGSTR_SS2.

    DEFINE FIELD STANDARD_DATE
    DATATYPE DATE.

    DEFINE FIELD TITLE
    DATATYPE TEXT SIZE 50.

    DEFINE FIELD DIARY_ENTRY
    DATATYPE SEGMENTED STRING
    SUB_TYPE TEXT
    SEGMENT_LENGTH 200.

    DEFINE RELATION DAILY_DIARY
      DESCRIPTION /* Simple diary */.
      ENTRY_DATE          BASED ON STANDARD_DATE.
      TITLE.
      DIARY_ENTRY.
    END.

    DEFINE RELATION SPECIAL_EVENTS
      DESCRIPTION IS
      /* Special events - birthdays, anniversaries, etc. */.
      EVENT_DATE           BASED ON STANDARD_DATE.
      EVENT_NAME           BASED ON TITLE.
      EVENT_DESCRIPTION    BASED ON DIARY_ENTRY.
      SPECIAL_INSTRUCTIONS BASED ON DIARY_ENTRY.
    END.

    DEFINE STORAGE MAP DAILY_DIARY_MAP
      DESCRIPTION IS
      /* Diary entries are randomly partitioned over two areas */
      FOR DAILY_DIARY
      STORE WITHIN SEGSTR_1; SEGSTR_2
    END.

    DEFINE STORAGE MAP SPECIAL_EVENTS_MAP
      DESCRIPTION IS
      /* Special events entries are stored in one area */
      FOR SPECIAL_EVENTS
      STORE WITHIN SEGSTR_1
    END.

    DEFINE STORAGE MAP DIARY_TEXT
      DESCRIPTION IS
      /* Keep segmented strings in separate areas */
      FOR SEGMENTED STRINGS
      STORE WITHIN
        SEGSTR_SS1 FOR DAILY_DIARY, SPECIAL_EVENTS.EVENT_DESCRIPTION;
        SEGSTR_SS2 FOR DAILY_DIARY;
        SEGSTR_1 FOR SPECIAL_EVENTS.SPECIAL_INSTRUCTIONS;
        RDB$SYSTEM      ! RDB$SYSTEM stores other segmented strings
        END.

    Example 5

    In the following example, three new storage areas (EMPIDS_LOW_
    UNIFORM, EMPIDS_MID_UNIFORM, and EMPIDS_OVER_UNIFORM) and a new
    relation (EMPLOYEES2) are defined in the MF_PERSONNEL database.
    Then a storage map is defined so that new EMPLOYEES2 records are
    stored in either the EMPIDS_LOW_UNIFORM, EMPIDS_MID_UNIFORM, or
    EMPIDS_OVER_UNIFORM storage areas, depending on the value stored
    in the LAST_NAME field.

    RDO> CHANGE DATABASE FILENAME MF_PERSONNEL
    cont>  DEFINE STORAGE AREA EMPIDS_LOW_UNIFORM
    cont>      FILENAME EMPIDS_LOW_UNIFORM.RDA
    cont>      END EMPIDS_LOW_UNIFORM STORAGE AREA
    cont>  DEFINE STORAGE AREA EMPIDS_MID_UNIFORM
    cont>      FILENAME EMPIDS_MID_UNIFORM.RDA
    cont>      END EMPIDS_MID_UNIFORM STORAGE AREA
    cont>  DEFINE STORAGE AREA EMPIDS_OVER_UNIFORM
    cont>      FILENAME EMPIDS_OVER_UNIFORM.RDA
    cont>      END EMPIDS_OVER_UNIFORM STORAGE AREA.
    RDO> !
    RDO> INVOKE DATABASE FILENAME MF_PERSONNEL
    RDO> !
    RDO> DEFINE RELATION EMPLOYEES2
    cont> DESCRIPTION IS /* new relation for testing */.
    cont>  EMPLOYEE_ID BASED ON ID_NUMBER.
    cont>  /* Generic last name */
    cont>     LAST_NAME DATATYPE IS TEXT SIZE IS 14.
    cont>  /* Generic first name */
    cont>     FIRST_NAME DATATYPE IS TEXT SIZE IS 10.
    cont>  /* Generic middle initial */
    cont>     MIDDLE_INITIAL DATATYPE IS TEXT SIZE IS 1.
    cont>  /* Street name */
    cont>     ADDRESS_DATA_1 DATATYPE IS TEXT SIZE IS 25.
    cont>  /* Mail stops, suite addresses, street numbers, etc. */
    cont>     ADDRESS_DATA_2 DATATYPE IS TEXT SIZE IS 25.
    cont>  /* City name */
    cont>     CITY DATATYPE IS TEXT SIZE IS 20.
    cont>  /* State abbreviation (or DISTRICT) */
    cont>     STATE DATATYPE IS TEXT SIZE IS 2.
    cont>  /* Postal code (in US = ZIP) */
    cont>     POSTAL_CODE DATATYPE IS TEXT SIZE IS 5.
    cont>  /* M, F */
    cont>     SEX DATATYPE IS TEXT SIZE IS 1.
    cont>     BIRTHDAY BASED ON STANDARD_DATE.
    cont>  /* A number */
    cont>     STATUS_CODE DATATYPE IS TEXT SIZE IS 1.
    cont> END EMPLOYEES2 RELATION.
    RDO> !
    RDO> DEFINE STORAGE MAP EMP2_LAST_NAME_MAP
    cont> FOR EMPLOYEES2 RELATION
    cont> STORE USING LAST_NAME
    cont> WITHIN EMPIDS_LOW_UNIFORM WITH LIMIT OF "IRONS"
    cont>        THRESHOLDS ARE (70,80,95);
    cont>        EMPIDS_MID_UNIFORM WITH LIMIT OF "QUIST";
    cont>        EMPIDS_OVER_UNIFORM
    cont> DEFAULT THRESHOLDS ARE (60,70,80)
    cont> END EMP2_LAST_NAME_MAP STORAGE MAP.

    Note that the EMPIDS_LOW_UNIFORM storage area receives the
    threshold values of (70,80,95) specified with the THRESHOLDS
    clause, and the EMPIDS_MID_UNIFORM and EMPIDS_OVER_UNIFORM
    storage areas receive the default threshold values of (60,70,80)
    specified with the DEFAULT THRESHOLDS clause.
Close Help