The control file syntax required to load an object table is nearly identical to that used to load a typical relational table. Example 11-10 demonstrates loading an object table with primary-key-based object identifiers (OIDs).
Example 11-10 Loading an Object Table with Primary Key OIDs
Control File Contents
LOAD DATA INFILE 'sample.dat' DISCARDFILE 'sample.dsc' BADFILE 'sample.bad' REPLACE INTO TABLE employees FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (name CHAR(30) NULLIF name=BLANKS, age INTEGER EXTERNAL(3) NULLIF age=BLANKS, emp_id INTEGER EXTERNAL(5))
Data File (sample.dat)
Johny Quest, 18, 007, Speed Racer, 16, 000,
By looking only at the preceding control file you might not be able to determine if the table being loaded was an object table with system-generated OIDs, an object table with primary-key-based OIDs, or a relational table.
You may want to load data that already contains system-generated OIDs and to specify that instead of generating new OIDs, the existing OIDs in the data file should be used. To do this, you would follow the INTO
TABLE
clause with the OID
clause:
OID (fieldname)
In this clause, fieldname
is the name of one of the fields (typically a filler field) from the field specification list that is mapped to a data field that contains the system-generated OIDs. SQL*Loader assumes that the OIDs provided are in the correct format and that they preserve OID global uniqueness. Therefore, to ensure uniqueness, you should use the Oracle OID generator to generate the OIDs to be loaded.
The OID
clause can only be used for system-generated OIDs, not primary-key-based OIDs.
Example 11-11 demonstrates loading system-generated OIDs with the row objects.
Control File Contents
LOAD DATA INFILE 'sample.dat' INTO TABLE employees_v2 1 OID (s_oid) FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (name CHAR(30) NULLIF name=BLANKS, age INTEGER EXTERNAL(3) NULLIF age=BLANKS, emp_id INTEGER EXTERNAL(5), 2 s_oid FILLER CHAR(32))
Data File (sample.dat)
3 Johny Quest, 18, 007, 21E978406D3E41FCE03400400B403BC3,
Speed Racer, 16, 000, 21E978406D4441FCE03400400B403BC3,
The callouts, in bold, to the left of the example correspond to the following notes:
The OID
clause specifies that the s_oid
loader field contains the OID. The parentheses are required
If s_oid
does not contain a valid hexadecimal number, then the particular record is rejected.
The OID in the data file is a character string and is interpreted as a 32-digit hexadecimal number. The 32-digit hexadecimal number is later converted into a 16-byte RAW
and stored in the object table.