Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Использование Java в Oracle / 25 сообщений из 25, страница 1 из 1
27.06.2006, 13:59:38
    #33816785
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Мне поручили вникнуть в сабж. Необходимо написать минимальную ХП на Java.

Если вам не трудно: можете прямо здесь устроить мне небольшой ликбезик результатом которого станет создание чего-то на яве (желательно с выдёргиванием хоть какой-то записи хоть из какой-то таблицы) что можно вызывать из скрипта на PL/SQL. Минимальные знания PL/SQL имеются.
...
Рейтинг: 0 / 0
27.06.2006, 14:41:54
    #33816944
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Вопрос не иначе от лени.

Oracle Database
Java Developer’s Guide
10g Release 2 (10.2)
B14187-01
Invoking Java Methods

1. Define a class, Hello, as follows:
public class Hello
{
public static String world()
{
return "Hello world";
}
}

....
...
Рейтинг: 0 / 0
27.06.2006, 14:41:58
    #33816946
Feech
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
По-моему, довольно подробно первые шаги в этом деле расписаны у Кайта. Имхо, именно то, что вам нужно.
...
Рейтинг: 0 / 0
27.06.2006, 14:50:45
    #33816985
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Спасибо. Просто время "слегка" ограничено. Командование поставило такую задачу. Спросить не у кого так как само командование ничего вроде не знает. Вот мне и велели "разобраться". Ну я и пошол по закоулкам Инэта в поисках инфы.
...
Рейтинг: 0 / 0
27.06.2006, 15:17:17
    #33817089
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
вот уже конкретный вопрос созрел.
Есть такая функция на яве:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class jtest extends Object{
	   public static int callMethod(){
	   		  counter++;
			  #sql {
			  	   INSERT INTO javaout VALUES("Yo")
			  };
			  return counter;
	   }
	   
	   private static int counter =  0 ;
}
/
Так она рождается:
Код: plaintext
1.
2.
3.
create or replace function java_test return number as
language java name 'jtest.callMethod() return integer';
/
Цель: вставить что-то куда-то:)

А вот я её вызываю:
Код: plaintext
1.
select java_test() from dual

А в ответ TOAD говорит:
Код: plaintext
1.
ORA- 29541 : class BBB.jtest could not be resolved

Если убрать из явы вызов SQL всё работает.
...
Рейтинг: 0 / 0
27.06.2006, 15:33:48
    #33817141
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Код: plaintext
create table javaout (value varchar2( 2000 ));
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create or replace and compile java source named "jtest" as
 import  java.sql.SQLException;
 public   class  jtest {
   public   static   int  callMethod()  throws  SQLException {
    counter++;
    #sql {insert into javaout values('Yo')};
     return  counter;
  }
   private   static   int  counter =  0 ;
}
/
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create or replace function java_test return number as
language java name 'jtest.callMethod() return int';
/
declare n integer;
begin
  n := java_test;
end;
/
...
Рейтинг: 0 / 0
27.06.2006, 15:46:06
    #33817192
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Спасибо. Работает без ошибок. Но вот чего-то не вставляется нифига:(
...
Рейтинг: 0 / 0
27.06.2006, 15:58:45
    #33817241
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Вот теперь такая лажа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "jtest" AS
import java.sql.SQLException;

public class jtest extends Object{
	   public static int callMethod(){
	   		  counter++;
			  return counter;
	   }
	   
	   public static void execSQL(){
	   		 try{
			 #sql {
			  	   INSERT INTO javaout(outstr) VALUES('Yo');
			  };
			  }
			  catch(SQLException e){
			  		counter =  1000 ;
			  }
	   }
	   
	   private static int counter =  0 ;
}
/
Есть процедура которая дёргает execSQL. Судя по значению counter опосля дёрганья возникает исключение.
...
Рейтинг: 0 / 0
27.06.2006, 16:09:24
    #33817282
Feech
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Насчет "не вставляет", может попробовать явно коммитить?


Is SQLJ ignoring my UPDATE statements?

When I try to update a record using SQLJ, the data remains unchanged. What is going on?

A couple of notes on this.

* JDBC connections have auto-commit on, but SQLJ connections usually have auto-commit off by default. Thus you need to remember to issue a COMMIT to make the update visible.

* #sql { COMMIT }; You can use an ExecutionContext to see how many rows got updated.

import sqlj.runtime.ExecutionContext;
...
ExecutionContext ec=new ExecutionContext();
#sql [ec] { UPDATE table SET ... WHERE ... };
* System.out.println("Updated "+ec.getUpdateCount()+" rows."); Remember that if the WHERE clause selects no rows, then 0 rows get updated and you will also not see a SQLException.

If your WHERE clause compares any CHAR columns to Java strings, it very likely will not work: you have to blank-pad the Java strings if you want the comparison to succeed. Or you can declare the column as VARCHAR2. Or you could use a LIKE comparison and append a "%" to the Java string.
...
Рейтинг: 0 / 0
27.06.2006, 16:14:34
    #33817297
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Sarin wrote:
> Судя по значению counter опосля дёрганья возникает исключение.

Почему бы не вывести это сообщение и не посмотреть на него?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
27.06.2006, 16:22:55
    #33817327
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
FeechНасчет "не вставляет", может попробовать явно коммитить?

Простите, я дурак. Что значит коммитить? Тоесть я понял, что надо сделать COMMIT. Но можно попросить Вас кинуть пример такого запроса?

Как вывести ошибку?
...
Рейтинг: 0 / 0
27.06.2006, 16:32:22
    #33817374
semenar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Sarin FeechНасчет "не вставляет", может попробовать явно коммитить?

Простите, я дурак. Что значит коммитить? Тоесть я понял, что надо сделать COMMIT. Но можно попросить Вас кинуть пример такого запроса?

Как вывести ошибку?
commit;
select * from javaout;
...
Рейтинг: 0 / 0
27.06.2006, 16:33:52
    #33817380
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
SarinНо можно попросить Вас кинуть пример такого запроса?
Возможно:
Код: plaintext
#sql { COMMIT };
SarinКак вывести ошибку?
А если блоке catch, через e.errorCode? (или что-то типа того, давно с java не работал...)
...
Рейтинг: 0 / 0
27.06.2006, 16:39:45
    #33817396
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Commit закончился ошибкой компиляции.

e.printStackTrace по идеи печатет стек. Пробовал. Но куда он его отпечатает?
...
Рейтинг: 0 / 0
27.06.2006, 16:46:30
    #33817427
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Sarine.printStackTrace по идеи печатет стек. Пробовал. Но куда он его отпечатает?
Если предварительно вызвать dbms_java.set_output(nnn), то будет печатать в оракловый output.
Может сделать просто?
Код: plaintext
1.
2.
 public   static   void  execSQL()  throws  SQLException {
  #sql {INSERT INTO javaout(outstr) VALUES('Yo');};
}
...
Рейтинг: 0 / 0
27.06.2006, 16:54:37
    #33817453
КП
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
SarinCommit закончился ошибкой компиляции.

e.printStackTrace по идеи печатет стек. Пробовал. Но куда он его отпечатает?
Код: plaintext
dbms_java.set_output( 1000000 );
Или файлы на сервере в /udump.

Мне кажется не туда заносит немного. На мой взляд суть сабжа заключатся не в возможности выполнения DML, а в возможности некоторой обработке данных, на которую не способен PLSQL.
...
Рейтинг: 0 / 0
27.06.2006, 17:02:03
    #33817471
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Да мне хоть чтонибудь бы получить от явы на предмет работы с таблицами.
...
Рейтинг: 0 / 0
27.06.2006, 17:04:50
    #33817478
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Вот что с throws получилось:

ORA-29532: Java call terminated by uncaught Java exception: oracle.jdbc.driver.OracleSQLException: ORA-00911: invalid character
ORA-06512: at "BBB.JAVA_SQL", line 0
ORA-06512: at line 4
...
Рейтинг: 0 / 0
27.06.2006, 17:10:31
    #33817492
semenar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Код: plaintext
CREATE TABLE JAVA(JAVA VARCHAR2( 10 ));
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "t" AS
 import  java.io.*;
 import  java.sql.*;

 public   class  ins_{

 public   static  oracle.sql.NUMBER ins_(String Vl)
 { int  rc =  0 ;String c;
   try  {
   rc= 0 ;c=Vl;
    #sql{insert into JAVA(java) VALUES(:c)};
        rc= 1 ;
         }  catch (Exception e)
          {e.printStackTrace();
                rc= 0 ;
       } finally {
      return   new  oracle.sql.NUMBER(rc);
    }
  }
}
/
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE OR REPLACE function run_(p_cmd in varchar2) return number as
  language java name 'insert_.insert_
                     (java.lang.String) return oracle.sql.number';
/

CREATE OR REPLACE PROCEDURE append_java IS
v number;
 begin
  v:= run_('ку-ку');
  commit;
end;
/
У меня вроде работает))
...
Рейтинг: 0 / 0
27.06.2006, 17:12:06
    #33817498
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
SarinВот что с throws получилось:

ORA-29532: Java call terminated by uncaught Java exception: oracle.jdbc.driver.OracleSQLException: ORA-00911: invalid character
ORA-06512: at "BBB.JAVA_SQL", line 0
ORA-06512: at line 4
Точка с запятой лишная, забыл убрать
Код: plaintext
1.
2.
3.
 public   static   void  execSQL()  throws  SQLException {
//  #sql {INSERT INTO javaout(outstr) VALUES('Yo');};
  #sql {INSERT INTO javaout(outstr) VALUES('Yo')};
}
...
Рейтинг: 0 / 0
27.06.2006, 17:17:55
    #33817511
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
Спасибо, товарищи дорогие!!! Огромное. Заработало.

Теперь позволю себе немного обнаглеть:) А как забрать переменную из запроса? В Нэте русском пока чёт не нашол ничего.
...
Рейтинг: 0 / 0
27.06.2006, 17:24:02
    #33817525
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
SarinА как забрать переменную из запроса?
/topic/271982
...
Рейтинг: 0 / 0
27.06.2006, 19:40:29
    #33817821
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
название вопроса неконткретное, лучше бы "как писать хранимую процедуру на Java".

Теория: можно с использованием JDBC, а можно с SQLJ. Приведённые выше примеры используют SQLJ, хотя популярнее JDBC.SQLJ в конечном счёте преобразуется в JDBC.
Литература
- в комплекте документации Oracle есть целая книжка по написанию хранимых процедур на Java (с использованием JDBC). По SQLJ есть книжка на русском языке, хотя не помню, есть ли там что о хранимых процедурах.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
01.07.2016, 09:31:32
    #39266055
bestonix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Java в Oracle
semenar,

поясните пожалуйста, как из функции run_ значение "ку-ку" попадает в java_код ins_.ins_ ?
...
Рейтинг: 0 / 0
01.07.2016, 13:13:59
    #39266323
Использование Java в Oracle
10 лет прошло епрст.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Использование Java в Oracle / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]