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

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

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

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

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

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

Код: 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
Вызов методов объектных типов Оракла из Java приложения.
    #32162939
alexmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну SQL и PL/SQL запросы с вызовом метода у меня работают. Начет SQLJ - надо посмотреть в девелопкр... , попробую - напишу...

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

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

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

Как же все-таки вызывать методы, а ?...
...
Рейтинг: 0 / 0
Вызов методов объектных типов Оракла из Java приложения.
    #32163024
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle Jdeveloper { castum-datum }.
Primer vyzova v Schema "Aurora"..(8i/9i)
...
Рейтинг: 0 / 0
Вызов методов объектных типов Оракла из Java приложения.
    #32163067
Саша Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эксперт, чуть по-подробне, плиз... где эта схема располагается ? у меня в 9.2 нет...
что такое castum-datum ?
...
Рейтинг: 0 / 0
Вызов методов объектных типов Оракла из Java приложения.
    #32163110
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вызов методов объектных типов Оракла из Java приложения.
    #32163231
Саша Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select c.get_ename() from test p , TABLE(p.emp) c
...
Рейтинг: 0 / 0
Вызов методов объектных типов Оракла из Java приложения.
    #32163253
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух ты! Еще не понял как, но работает, спасибо.
...
Рейтинг: 0 / 0
Вызов методов объектных типов Оракла из Java приложения.
    #32163267
Саша Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А за всегда - пожалуйса !!!
...
Рейтинг: 0 / 0
Вызов методов объектных типов Оракла из Java приложения.
    #32163451
alexmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Денис,

в 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
Вызов методов объектных типов Оракла из Java приложения.
    #32163457
Саша Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После import
нужно вставить

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

забыл
...
Рейтинг: 0 / 0
Вызов методов объектных типов Оракла из Java приложения.
    #32163519
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вызов методов объектных типов Оракла из Java приложения.
    #32163689
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, я так примерно и пытался, но неточно разобрался с синтаксисом, спасибо. Что удивляет в примере SY и Саши Питерского - можно не кастировать поле EMP на объектный тип-таблицу, т.е. не писать
Код: plaintext
select e.get_ename() ename from TABLE(cast(t.emp as tbl_emp)) e
Думал, что это только для pipelined-функций необязательно. Еще изумило указание во FROM сперва таблицы, а потом ее же объектного поля.
...
Рейтинг: 0 / 0
Вызов методов объектных типов Оракла из Java приложения.
    #32163792
Саша Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я НЕПОНИМАЮ ! как вызвать метод конкретного экземпляра класса из Жабы ... Как мне вызсать get_ename() в примере Дениса, ?
...
Рейтинг: 0 / 0
Вызов методов объектных типов Оракла из Java приложения.
    #32163829
Саша Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот рабочий пример вставки и селекта посредством 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
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вызов методов объектных типов Оракла из Java приложения.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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