В СУБД Oracle9i введена возможность "бесшовно" отображать заданный Java-класс в некоторый объект SQL. Согласно части 2 стандарта SQLJ, SQLJ Object Types (Объектные типы SQLJ), определяется отображение между некоторым объектом SQL и соответствующей реализацией Java-класса. Спецификации SQLJ Object Types находятся в процессе стандартизации в качестве расширения стандарта SQL:99. (Прим. ред. В июле 2002 г. указанное расширение стандарта SQL:1999 было принято в качестве части 13 этого стандарта под названием SQL/JRT, где аббревиатура JRT расшифровывается как Java Routines and Types.)
Рассмотрим следующий пример:
CREATE TYPE ADDRESS_T AS OBJECT EXTERNAL NAME "Address" LANGUAGE JAVA USING SQLDATA ( STREET VARCHAR(50) EXTERNAL NAME "street", ZIP_CODE VARCHAR(10) EXTERNAL NAME "zip", STATIC FUNCTION GET_CITY (VARCHAR zip) RETURN VARCHAR EXTERNAL NAME "get_city(java.lang.String) RETURN java.lang.String", STATIC FUNCTION GET_STATE (VARCHAR zip) RETURN VARCHAR EXTERNAL NAME "get_state(java.lang.String) RETURN java.lang.String", MEMBER FUNCTION CITY RETURN VARCHAR EXTERNAL NAME "getCity() RETURN java.lang.String", MEMBER FUNCTION STATE RETURN VARCHAR EXTERNAL NAME "getState() RETURN java.lang.String");
В данном примере в операторе CREATE TYPE предложение EXTERNAL NAME специфицирует внешнее имя, которое определяет Java-класс, используемый в реализации. Предложение USING специфицирует интерфейс, используемый для доступа к состоянию объекта.
Для каждого атрибута данного объектного типа необязательное предложение EXTERNAL NAME задает имя соответствующего Java-поля. Для методов предложение EXTERNAL NAME определяет имя соответствующей Java-функции и ее сигнатуру.
Приведенная выше информация об отображении хранится как часть метаданных данного типа. Она обеспечивает "бесшовный" доступ к объектам SQL из Java через JDBC, не требуя от пользователя явного применения интерфейса SQLData или регистрации этого класса с помощью отображения типов Java (Java typemap).
Иерархия объектных типов в SQLJ может быть отображена в иерархию наследования Java. Диспетчеризация методов, включая переопределение этих типов, осуществляется в процессе исполнения Java-программы.