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.