12.1. Manipulating Oracle SQL and PL/SQL Data Types with SQLJ12.1.1. Oracle SQLJ Type-Mapping Summary12.1.2. Column DefinitionsAutomatic Registration of Column Types and SizesEnabling Column Definition12.1.3. Manipulating SQL Null Data with SQLJ12.1.4. Manipulating Character Data Types with SQLJCHAR, CHAR(n), CHAR(n BYTE), CHAR(n CHAR) VARCHAR2 (n), VARCHAR2(n BYTE), VARCHAR2 (n CHAR)NCHAR, NCHAR(n), NVARCHAR2 (n)12.1.5. Oracle SQLJ Support for Number Data TypesNUMBER, NUMBER(p), NUMBER(p, s)BINARY_FLOAT and BINARY_DOUBLE12.1.6. SQLJ Streams, LONG, and RAW Data TypesSQL RAW(s)LONG, LONG RAWSQLJ StreamsUsing SQLJ Streams to Send and Retrieve Data to and from the DatabaseSQLJ Stream Objects as Procedures Output Parameters and Function Return Values12.1.7. SQLJ Support for SQL Datetime Data TypesDATETIMESTAMP, TIMESTAMPTZ, and TIMESTAMPLTZINTERVAL YEAR TO MONTH and INTERVAL DAY TO SECOND12.1.8. SQLJ Support for SQL LOB Data TypesOverviewUsing the DBMS_LOB PackageUsing Standard JDBC LOB API and oracle.sql LOB ExtensionsUsing SQLJ StreamingLOB and BFILE Stored Function ResultsLOB and BFILE Host Variables ( SELECT INTO Targets)LOBs and BFILEs in Iterator DeclarationsLOB and BFILE HostVariables as Named IteratorLOB and BFILE Host Variables as Positional Iterator (FETCH INTO Targets)12.1.9. SQLJ Support for Oracle SQL ROWID12.1.10. SQLJ Support for OPAQUE TypesXMLType12.1.11. SQLJ Support for SQL Object Types and SQL References TypesType MapWeak Type Mapping: Struct and STRUCTStrong Type Mapping: SQLData and ORADataSQLJ Object TypesSQL REFREF Cursors12.1.12. Serialized Java ObjectsSerializing Java Objects Using typeMAPSerializing Java Objects Using ORADataSerializing Java Objects by Value12.1.13. SQLJ Support for User-Defined SQL CollectionsVARRAYsNested Tables12.1.14. PL/SQL Associative Array12.1.15. Unsupported TypesDATALINKNamed ParametersPL/SQL BOOLEAN and PL/SQL RECORD12.2. SQLJ Best Practices12.2.1. Row Prefetch12.2.2. Statement Caching12.2.3. Update Batching12.3. Conclusion