Oracle для профессионалов




Передача данных - часть 2


tkyte@TKYTE816> create or replace type dateArray as table of date; Type created.

tkyte@TKYTE816> create or replace type strArray as table of varchar2(255); Type created.

Теперь рассмотрим спецификацию PL/SQL-пакета для этого примера. Она будет состоять из набора перегруженных процедур и функций для проверки приема и передачи параметров в хранимых процедурах на языке Java. Каждая подпрограмма имеет параметр, предаваемый в режиме IN, и параметр, передаваемый в режиме OUT, что позволяет продемонстрировать передачу данных в Java-код и возвращение результатов.

Первая процедура передает числовые данные. Данные Oracle типа NUMBER

будут передаваться как Java-тип BigDecimal. Их можно принимать и как данные типа int, и как строки и как другие типы, но при этом возможна потеря точности. Данные типа BigDecimal могут без проблем принять любое значение типа NUMBER от сервера Oracle.

Обратите внимание, что параметр, передаваемый в режиме OUT, на уровне Java принимается как массив данных типа BigDecimal. Так будет для всех параметров, передаваемых Java в режиме OUT. Для изменения параметра, переданного Java, нужно передавать "массив" параметров (в этом массиве будет только один элемент) и изменять соответствующий элемент массива. Далее, при описании кода на языке Java, вы увидите, как это сказывается на исходном коде.

tkyte@TKYTE816> create or replace package demo_passing_pkg 2 as 3 procedure pass(p_in in number, p_out out number) 4 as 5 language java 6 name 'demo_passing_pkg.pass(java.math.BigDecimal, 7 java.math.BigDecimal[])'

Даты Oracle сопоставляются типу данных Timestamp. И в этом случае можно было бы сопоставить датам множество других типов, например String, но во избежание потери информации при неявных преобразованиях я выбрал тип

Timestamp, который позволяет сохранить все данные, содержащиеся в объектах Oracle типа DATE.

8 9 procedure pass(p_in in date, p_out out date) 10 as 11 language java 12 name 'demo_passing_pkg.pass(java.sql.Timestamp, 13 java.sql.Timestamp[])';




Содержание  Назад  Вперед