Программирование >>  Oracle 

1 ... 385 386 387 [ 388 ] 389 390 391 ... 469


Пакет DBMS JAVA 1587

В следующем примере мы организуем новый сеанс и убедимся, что таблицы JAVA$OPTIONS нет. Мы установим опцию компилятора и увидим, что таблица автоматически создана. Наконец, мы создадим такую же Java-функцию, как в примере выше, и увидим, что теперь она компилируется без предупреждений благодаря установленной опции компилятора:

tkyte@TKYTE816> disconnect

Disconnected from Oracle8i Enterprise Edition Release 8.1.6.0.0 - -> Production

With the Partitioning option

JServer Release 8.1.6.0.0 - Production

tkyte@TKE816> connect tkyte/tkyte Connected.

tkyte@TKYTE816> column value format al0 tkyte@TKYTE816> column what format al0

tkyte@TKYTE816> select * from java$options; select * from java$options

ERROR at line 1:

ORA-00942: table or view does not exist

tkyte@TKYTE816> begin

2 dbms java.set compiler option

3 (what => bad code,

4 optionName => online,

5 value => false) ;

6 end;

PL/SQL procedure successfully completed.

tkyte@TKYTE816> select * from java$options;

WHAT OPT VALUE

bad code online false

tkyte@TKYTE816> create or replace and compile

2 java source named bad code

3 as

4 import java.sql.SQLException;

6 public class bad code extends Object

8 public static void wont work() throws SQLException

10 #sql {

11 insert into non existent table values (1)

12 };

13 }

14 }

15 /

Java created.



1588

ПриложениеА

tkyte@TKIE816> show errors java source bad code No errors.

В данном случае процедура SET COMPILER OPTION вызывается с тремя параметрами.

WHAT. Шаблон, с которым надо сопоставлять код. Обычно Java-программы используют пакеты, поэтому полное имя будет иметь вид a.b.c.bad code, а не просто badcode. Если необходимо установить опцию для пакета a.b.c, это можно сделать. В результате для любого кода, имя которого соответствует шаблону a.b.c, будет использоваться соответствующая опция, если только нет более точной спецификации, тоже соответствующей данному пакету. Если опции заданы для значений WHAT, равных a.b.c и a.b.c.bad code, будет использоваться опция для a.b.c.bad code, поскольку она соответствует большей части имени.

OPTIONNAME. Одно из трех значений: ONLINE, DEBUG или ENCODING.

VALUE. Значение соответствующей опции.

С процедурой SET COMPILER OPTION связаны еще две подпрограммы.

GET COMPILER OPTION. Эта функция возвращает значение указанной опции компилятора, даже если оно не отличается от стандартного.

RESET COMPILER OPTION. Эта процедура удаляет из таблицы JAVA$OPTIONS

строки, соответствующие шаблону WHAT и имеющие указанное значение в столбце OPTIONNAME.

Вот примеры использования обеих подпрограмм. Начнем с использования

GET COMPILER OPTION, чтобы узнать значение опции online:

tkyte@TKYTE816> set serveroutput on

tkyte@TKYTE816> begin

2 dbms output.put line

3 (dbms java.get compiler option(what => bad code,

4 optionName => online));

5 end;

6 / false

PL/SQL procedure successfully completed.

A затем сбросим ее с помощью процедуры RESET COMPILER OPTION:

tkyte@TKYTE816> begin

2 dbms java.reset compiler option(what => bad code,

3 optionName => online);

4 end;

PL/SQL procedure successfully completed.

Теперь убедимся, что функция GET COMPILER OPTION всегда возвращает значение указанной опции компилятора, даже если таблица JAVA$OPTIONS пуста (при вызове RESET COMPILER OPTION соответствующая строка была удалена):



Пакет DBMS JAVA 1589

tkyte@TK:E816> begin

2 dbms output.put line

3 (dbms java.get compiler option(what => badcode,

4 optionName => online));

5 end;

true

PL/SQL procedure successfully completed. tkyte@TKYTE816>select * from java$options; no rows selected

Процедура S OUTPUT

Эта процедура аналогична команде SET SERVEROUTPUT ON в SQL*Plus. Точно так же, как выполнение этой команды включает вывод строк с помощью пакета DBMS OUTPUT, вызов DBMS JAVA.SET OUTPUT обеспечивает вывод результатов функций System.out.println и System.err.print на экран в SQL*Plus. Если не выполнить вызовы:

SQ set serveroutput on size 1000000 SQ exec dbms java.set output(1000000)

перед выполнением хранимой процедуры на языке Java из среды SQL*Plus, то все сообщения, выдаваемые с помощью вызовов System.out.println, будут записываться в трассировочный файл в каталоге на сервере, задаваемом параметром инициализации USER DUMP DEST. Эта процедура используется при отладке хранимых процедур на языке Java, поскольку позволяет помещать в код выдачу отладочной информации в виде вызовов System.out.println во многом аналогично вызовам DBMS OUTPUT.PUT LINE в PL/SQL-коде. В дальнейшем можно отключить в]дачу отладочной информации в Java-коде, перенаправив ее в корзину .

Так что, если вас интересовало, куда делись результаты вызовов System.out в хранимой процедуре на языке Java, вы теперь знаете ответ. Они выдаются в трассировочный файл. Теперь вы сможете перенаправить их на экран в среде SQL*Plus.

Процедуры loadjava и dropjava

Эти процедуры обеспечивают интерфейс для языка PL/SQL, позволяющий выполнять функции утилит командной строки loadjava и dropjava. Как и следовало ожидать для служебных процедур, при их вызове не надо указывать опцию -u имя пользовате-ля/пароль или задавать тип используемого JDBC-драйвера - вы ведь уже подключились к базе данных. Процедуры загрузят Java-объекты в текущую схему. Эти процедуры имеют следующие прототипы:

PROGEDUREloadjava(options varchar2)

PROGEDUREloadjava(options varchar2, resolvervarchar2) PROGEDUREdropjava(optionsvarchar2)



1 ... 385 386 387 [ 388 ] 389 390 391 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика