|
Программирование >> Oracle
Пакет 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)
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |