Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вызов методов объектных типов Оракла из Java приложения. / 20 сообщений из 20, страница 1 из 1
19.05.2003, 09:34
    #32162653
Саша Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
Будьте любезны, обясните мне как из явы вызвать какой-либо метод объектной таблицы ? Лутше на примере :))

У меня такие идеи :

1. через SQLJ
2. через динамический SQL (JDBC)

но это, видимо, ламерство. Ведь наверняка я могу вызывать методы напрямую ? точно могу, но как, мне что то не сообразить...

Спасибо.
...
Рейтинг: 0 / 0
19.05.2003, 12:04
    #32162831
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
У меня пока и в простом запросе не получается вызвать метод у объектного типа, которым заполнена некая объектная таблица. Только как-то через дополнительные переменные. Попутно вопрос: на чем отлаживают SQLJ, на Oracle JDeveloper'е? Borland JBuilder сразу ругнулся на конструкцию вроде #sql { INSERT INTO emp (ename, sal) VALUES ('Joe', 43000) };
...
Рейтинг: 0 / 0
19.05.2003, 12:53
    #32162906
Саша Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
Ну SQL и PL/SQL запросы с вызовом метода у меня работают. Начет SQLJ - надо посмотреть в девелопкр... , попробую - напишу...

Как же все-таки вызывать методы, а ?...
...
Рейтинг: 0 / 0
19.05.2003, 13:17
    #32162934
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
А покажи:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
create or replace type t_emp as object (
   empno number ( 9 )
 , ename varchar2( 10 )
 , member function get_ename return varchar2
)
/
create or replace type body t_emp as
 member function get_ename return varchar2 is begin return ename; end;
end;
/
create or replace type tbl_emp as table of t_emp
/

create table test (
   test_id number( 9 )
 , emp tbl_emp
 , constraint pk_test primary key (test_id)
)
nested table emp store as test_emp
/

declare vt tbl_emp := tbl_emp();
begin
 for i in (select empno, ename from scott.emp where deptno =  20 ) loop
   vt.extend;
   vt(vt.count) := t_emp(i.empno, i.ename);
 end loop;
 delete test;
 insert into test(test_id, emp) values ( 1 , vt);
 commit;
end;
/


Теперь: как мне в запросе вызвать метод get_ename?
...
Рейтинг: 0 / 0
19.05.2003, 13:19
    #32162939
alexmann
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
Ну SQL и PL/SQL запросы с вызовом метода у меня работают. Начет SQLJ - надо посмотреть в девелопкр... , попробую - напишу...

Как же все-таки вызывать методы, а ?...
...
Рейтинг: 0 / 0
19.05.2003, 13:20
    #32162940
alexmann
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
Ну SQL и PL/SQL запросы с вызовом метода у меня работают. Начет SQLJ - надо посмотреть в девелопкр... , попробую - напишу...

Как же все-таки вызывать методы, а ?...
...
Рейтинг: 0 / 0
19.05.2003, 13:20
    #32162942
Саша Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
Ну SQL и PL/SQL запросы с вызовом метода у меня работают. Начет SQLJ - надо посмотреть в девелопкр... , попробую - напишу...

Как же все-таки вызывать методы, а ?...
...
Рейтинг: 0 / 0
19.05.2003, 13:20
    #32162943
Саша Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
Ну SQL и PL/SQL запросы с вызовом метода у меня работают. Начет SQLJ - надо посмотреть в девелопкр... , попробую - напишу...

Как же все-таки вызывать методы, а ?...
...
Рейтинг: 0 / 0
19.05.2003, 14:09
    #32163024
Oracle X-pert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
Oracle Jdeveloper { castum-datum }.
Primer vyzova v Schema "Aurora"..(8i/9i)
...
Рейтинг: 0 / 0
19.05.2003, 14:36
    #32163067
Саша Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
Эксперт, чуть по-подробне, плиз... где эта схема располагается ? у меня в 9.2 нет...
что такое castum-datum ?
...
Рейтинг: 0 / 0
19.05.2003, 15:05
    #32163110
Oracle X-pert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
JDeveloper ispol'zuet extract - metod Oracle DB's objects v Java code
Eto i nazyvaetsya metode Castum-Datum. JDev, osobenno 9i, generiruet eti
classes. { v help dolgny byt' examples.. } vecherom pokopaus' v svoie library i dam svoi primery.
Regards!
...
Рейтинг: 0 / 0
19.05.2003, 16:28
    #32163231
Саша Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
select c.get_ename() from test p , TABLE(p.emp) c
...
Рейтинг: 0 / 0
19.05.2003, 16:39
    #32163253
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
Ух ты! Еще не понял как, но работает, спасибо.
...
Рейтинг: 0 / 0
19.05.2003, 16:47
    #32163267
Саша Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
А за всегда - пожалуйса !!!
...
Рейтинг: 0 / 0
19.05.2003, 20:18
    #32163451
alexmann
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
Денис,

в Jdev есть понятие SQLJ class. В нем пишешь код, сщдержащий SQLJ утверждения, и выполняшью Пример:

package mypackage;
import sqlj.runtime.*;
import sqlj.runtime.ref.*;
import java.sql.*;
import oracle.sqlj.runtime.Oracle;

public class Sqlj1
{
public Sqlj1()
{
}

public static void main(String[] args) throws SQLException
{
Sqlj1 sqlj1 = new Sqlj1();


Oracle.connect("jdbc:oracle:thin:@192.168.13.2:1521:try", "try1","try");

MyIter iter;

#sql iter={select c.* from test p , TABLE(p.emp) c};
while (iter.next()) {
System.out.println (iter.empno()+" "+iter.ename());
}
}
}
...
Рейтинг: 0 / 0
19.05.2003, 20:39
    #32163457
Саша Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
После import
нужно вставить

#sql iterator MyIter (String ename, int empno);

забыл
...
Рейтинг: 0 / 0
20.05.2003, 00:39
    #32163519
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
2 Denis Popov:
The ony way I know как в запросе вызвать метод get_ename is:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
SQL> create or replace type t_emp as object (
   2      empno number ( 9 )
   3    , ename varchar2( 10 )
   4    , member function get_ename return varchar2
   5   )
   6   /
Type created.
SQL> create or replace type body t_emp as
   2    member function get_ename return varchar2 is begin return ename; end;
   3   end;
   4   /
Type body created.
SQL> create or replace type tbl_emp as table of t_emp
   2   /
Type created.
SQL> create table test (
   2      test_id number( 9 )
   3    , emp tbl_emp
   4    , constraint pk_test primary key (test_id)
   5   )
   6   nested table emp store as test_emp
   7   /
Table created.
SQL> declare vt tbl_emp := tbl_emp();
   2   begin
   3    for i in (select empno, ename from scott.emp where deptno =  20 ) loop
   4      vt.extend;
   5      vt(vt.count) := t_emp(i.empno, i.ename);
   6    end loop;
   7    delete test;
   8    insert into test(test_id, emp) values ( 1 , vt);
   9    commit;
  10   end;
  11   /
PL/SQL procedure successfully completed.
SQL> select t.test_id,(cursor(select e.get_ename() ename from TABLE(t.emp) e)) ename from test t
   2   /

   TEST_ID ENAME
 ---------- --------------------
 
          1  CURSOR STATEMENT :  2 

CURSOR STATEMENT :  2 

ENAME
 --------------------------------------------------------------------------------
 
SMITH
JONES
SCOTT
ADAMS
FORD

SY.
...
Рейтинг: 0 / 0
20.05.2003, 10:29
    #32163689
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
Ага, я так примерно и пытался, но неточно разобрался с синтаксисом, спасибо. Что удивляет в примере SY и Саши Питерского - можно не кастировать поле EMP на объектный тип-таблицу, т.е. не писать
Код: plaintext
select e.get_ename() ename from TABLE(cast(t.emp as tbl_emp)) e
Думал, что это только для pipelined-функций необязательно. Еще изумило указание во FROM сперва таблицы, а потом ее же объектного поля.
...
Рейтинг: 0 / 0
20.05.2003, 11:39
    #32163792
Саша Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
Я НЕПОНИМАЮ ! как вызвать метод конкретного экземпляра класса из Жабы ... Как мне вызсать get_ename() в примере Дениса, ?
...
Рейтинг: 0 / 0
20.05.2003, 12:04
    #32163829
Саша Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов методов объектных типов Оракла из Java приложения.
Вот рабочий пример вставки и селекта посредством SQLJ.

А вызвать так метод не получается


package mypackage;
import sqlj.runtime.*;
import sqlj.runtime.ref.*;
import java.sql.*;
import oracle.sqlj.runtime.Oracle;
#sql iterator MyIter (String ename, int empno);

public class Sqlj1
{
public Sqlj1()
{
}

public static void main(String[] args) throws SQLException
{
Sqlj1 sqlj1 = new Sqlj1();

Oracle.connect("jdbc:oracle:thin:@test:1521:try", "try","try");

#sql {insert into test values(3, tbl_emp(t_emp(1000000, 'Sasha Piters')))};

MyIter iter;


#sql iter={select c.* from test p , TABLE(p.emp) c};

while (iter.next()) {
System.out.println (iter.empno()+" "+iter.ename());


}
}
}

Еще интнрнсно, что неявного комита не происходит...
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вызов методов объектных типов Оракла из Java приложения. / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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