|
Программирование >> Oracle
1382 Глава 19 4 import java.lang.String; 5 import java.sql.Timestamp; 7 public class MyTimestamp 9 public static String getTimestamp() 10 { 11 return (new 12 Timestamp(System.currentTimeMillis())).toString(); 13 J 14 J; 15 / Java created. tkyte@TKYTE816> create or replace function my timestamp return varchar2 2 as language java 3 name MyTimestamp.getTimestampO return java.lang.String; Function created. tkyte@TKYTE816> select my timestamp, 2 to char(sysdate,yyyy-mm-dd hh24:mi:ss) from dual MY)TIMESTAMP TO CHAR(SYSDATE,YY 2001-03-27 19:15:59.688 2001-03-27 19:15:59 Возможные ошибки Большинство сообщений об ошибках, которые вы получите при использовании хре-нимых процедур на Java, связаны с компиляцией кода и несоответствием типов параметров. Некоторые из наиболее типичных сообщений об ошибках рассмотрены ниже. ORA-29549 Java Session State Cleared По ходу разработки можно столкнуться с сообщениями следующего вида: select mytimestamp, to char(sysdate,yyyy-mm-dd hh24:mi:ss) from dual ROR at line 1: ORA-29549: class Y.MyTimestamp has changed, Java session state cleared Это означает, что использованный в сеансе класс б1л перекомпилирован (скорм всего - вами же). Вся связанная с этим классом информация о состоянии потеряна. Достаточно повторно выполнить оператор, при выполнении которого было выдано это сообщение, и информация о состоянии обновится. По этой причине следует избегать повторной загрузки Java-классов в действующе* производственной системе. После этого использующий Java-класс сеанс при обращении к нему получит такое сообщение об ошибке. Хранимые процедуры на языке Java 1383 Ошибки прав доступа Мы уже знакомы с таким сообщением: EOR at line 1: ORA-29532: Java call terminated by uncaught Java exception: java.security.AccessControlException: the Permission (java.io.FilePermission c:\temp read) has not been granted by dbms java.grant permission to SchemaProtectionDomain(TKYTE IPolicyTableProxy(TKYTE)) ORA-06512: at TKYTE.GET DIR LIST, line 0 ORA-06512: at line 1 К счастью, в тексте сообщения об ошибке явно указано, какие привилегии необходимо получить, чтобы вызов б]л успешным. Обладающий соответствующими привилегиями пользователь должен предоставить вам эти привилегии с помощью процедуры GRANT PERMISSION пакета DBMS JAVA. ORA-29531 no method X in class Y Если в рассмотренном ранее примере RunThis изменить спецификацию вызова следующим образом: tkyte@TKYTE816>create or replace 2 function RUN C(p cmd in varchar2) return number 3 as 4 language java 5 name Util.RunThis(String[]) return integer; 7 / Function created. будет вщано сообщение об ошибке ORA-29531. Обратите внимание, что в списке пара-пв функции Util.RunThis, я указал тип данн1х String, а не java.lang.String. (kyte@TKE816> exec rcCc:\winnt\system32\cmd.exe /с dir) java.lang.NullPointerException at oracle.aurora.util.JRIExtensions.getMaximallySpecificMethod(JRIExtensions.java) at oracle.aurora.util.JRIExtensions.getMaximallySpecificMethod(JRIExtensions.java) BEGIN RC(c:\winnt\system32\cmd.exe /c dir); sD ERROR at line 1: ORA-29531: no method RunThis in class Util ORA-06512: at TKYTE.RUN C , line 0 ORA-06512: at TKYTE.RC , line 5 ORA-06512: at line 1 Дело в том, что для успешного сопоставления типов данных должны указываться л (fully qualified) имена типов. Хотя класс java.lang неявно импортируется в Java-программах, он не импортируется на уровне языка SQL. Получив это сообщение об ошибке, необходимо проверить сопоставление типов данных и убедиться, что используются полн1е имена типов данных Java и что они в точности совпадают с именами 1384 Глава 19 имеющихся типов данных. Соответствующий Java-метод определяется по сигнатуре, а сигнатура создается на основе используемых типов данных. Минимальное различие в типах входных данных, результатов или регистре символов в имени приведет к несовпадению сигнатур, и сервер Oracle не найдет соответствующий код. Резюме В этой главе вы узнали, как реализовать хранимые процедуры на языке Java. Это не означает, что весь существующий код на языке PL/SQL необходимо переписать в виде хранимых процедур на Java. Но если, программируя на PL/SQL, вы столкнетесь с неразрешимой проблемой, что обычно происходит при необходимости выйти за пределы базы данных и обеспечить взаимодействие с операционной системой, попробуйте решить задачу с помощью языка Java. Благодаря полученным в этой главе сведениям вы сможете передать основные тип1 данных SQL, в том числе массивы, с уровня PL/SQL на уровень Java-методов и получить результаты. Я представил несколько полезных фрагментов Java-кода, которые можно использовать непосредственно; обратившись к документации по языку Java, вы обнаружите десятки других фрагментов, незаменимых при разработке приложений. При осторожном использовании, программирование на Java может существенно расширить возможности разработки приложений.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |