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




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


Строки типа VARCHAR2 передаются очень просто — как данные типа java.lang.String.

14 15 procedure pass(p_in in varchar2, p_out out varchar2) 16 as 17 language java 18 name 'demo_passing_pkg.pass(java.lang.String, 19 java.lang.String[])';

Для данных типа CLOB мы используем предоставляемый Oracle Java-тип oracle.sql.CLOB. С помощью этого типа мы сможем получить входной и выходной потоки данных, используемые для чтения и записи данных типа CLOB.

20 21 procedure pass(p_in in CLOB, p_out in out CLOB) 22 as 23 language java 24 name 'demo_passing_pkg.pass(oracle.sql.CLOB, 25 oracle.sql.CLOB[])';

Теперь перейдем к наборам: вы видели, что, независимо от типа фактически передаваемого набора, используется один и тот же предоставляемый Oracle тип. Вот почему в данном случае Java-функции не являются перегруженными, как все предыдущие (пока что все вызываемые Java-функции назывались demo_passing_pkg.pass). Поскольку все типы наборов передаются как один и тот же тип Java, перегрузку имен использовать нельзя — необходимо называть функцию в соответствии с реально передаваемым типом данных:

26 27 procedure pass(p_in in numArray, p_out out numArray) 28 as 29 language java 30 name 'demo_passing_pkg.pass_num_array(oracle.sql.ARRAY, 31 oracle.sql.ARRAY[])'; 32 33 procedure pass(p_in in dateArray, p_out out dateArray) 34 as 35 language java 36 name 'demo_passing_pkg.pass_date_array(oracle.sql.ARRAY, 37 oracle.sql.ARRAY[])'; 38 39 procedure pass(p_in in strArray, p_out out strArray) 40 as 41 language java 42 name 'demo_passing_pkg.pass_str_array(oracle.sql.ARRAY, 43 oracle.sql.ARRAY[])';

Следующие две процедуры демонстрируют сопоставление для типов RAW

и INT. SQL-тип RAW будет сопоставляться встроенному типу byte

языка Java. Для целых чисел будет использоваться встроенный тип данных int языка Java:

44 45 procedure pass_raw(p_in in RAW, p_out out RAW) 46 as 47 language java 48 name 'demo_passing_pkg.pass(byte[], byte[][])'; 49 50 procedure pass_int(p_in in number, 51 p_out out number) 52 as 53 language java 54 name 'demo_passing_pkg.pass_int(int, int[])';




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