Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Создание типа STRUCT  [new]
HOME_X
Member

Откуда:
Сообщений: 2548
Доброго дня господа !

Как создать и вернуть пользоват. класс STRUCT

Имею классы
create or replace and compile java source named probastruct as
import java.sql.*;
import java.util.*;

public class GenericStruct implements java.sql.Struct 
{
   private Object[] attributes = null;
   private String typeName = null;

   public void setSQLTypeName(String name)
   {
      typeName = name;
   }

   GenericStruct() 
   { 
   }

   GenericStruct(String name, Object [] obj)
   {
      typeName = name;
      attributes = obj;
   }

   public String getSQLTypeName()
   {
      return typeName;
   }
   public Object [] getAttributes()
   {
      return attributes;
   }
   public Object [] getAttributes(Map map) 
   throws SQLException
   {
      return attributes;
   }
   public void setAttributes(Object [] objArray)
   {
      attributes = objArray;
   }
} 


create or replace and compile java source named adttabclass as
   
import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.*;
import java.util.Date;

public class ADTTabClass
{
  public static STRUCT ADTTabFunc (NUMBER id[], STRUCT adt[], STRUCT adt2) 
  throws SQLException
  { 
    STRUCT st = adt2;
    id[0] = new NUMBER(id[0].intValue() + 1000);
    adt[0] = adt2;

    String rowType;
    GenericStruct gs;
    Object[] name = new Object[3];
    name[0] = new NUMBER(100);
    name[1] = new String("Hello");
    name[2] = new Date();
    rowType = "ADTTYP2(n1 number, n2 varchar2(30), n3 date)";
    gs = new GenericStruct(rowType, name);
   // st = (STRUCT) gs;   - не соответствую типы
    return st;
  }
}


declare
  a number;
  x ADTTYP2;
  y ADTTYP2;
  z ADTTYP2;
begin
  a := 5;
  x := ADTTYP2(11,'JAVA record in' ,'11-MAY-2001');
  y := ADTTYP2(80,'JAVA record OUT','18-MAY-2001');
  z := ADTTabFunc(a, x, y);
  dbms_output.put_line('n1 = ' || z.n1 || ', n2 = ' || z.n2 || ', n3 =' || z.n3);
end;


Заранее благодарен !
26 июн 16, 16:16    [19336982]     Ответить | Цитировать Сообщить модератору
 Re: Создание типа STRUCT  [new]
HOME_X
Member

Откуда:
Сообщений: 2548
HOME_X,

Используются типы
java.sql.Struct;
oracle.sql.STRUCT;

Ну как их привести ?
26 июн 16, 16:26    [19337000]     Ответить | Цитировать Сообщить модератору
 Re: Создание типа STRUCT  [new]
стрюцт
Guest
HOME_X,

Занафиг понадобилось наследовать STRUCT? Он предназначен для универсальной работы с набором атрибутов.
26 июн 16, 18:17    [19337211]     Ответить | Цитировать Сообщить модератору
 Re: Создание типа STRUCT  [new]
HOME_X
Member

Откуда:
Сообщений: 2548
стрюцт
HOME_X,

Занафиг понадобилось наследовать STRUCT? Он предназначен для универсальной работы с набором атрибутов.


Мне необходимо создать функцию с возвратом такого типа
return oracle.sql.STRUCT

create or replace function ADTTabFunc (x IN OUT number, y IN OUT
ADTTYP2, z IN ADTTYP2)
return ADTTYP2 as language java
name 'ADTTabClass.ADTTabFunc(oracle.sql.NUMBER[],
oracle.sql.STRUCT[],
oracle.sql.STRUCT) return oracle.sql.STRUCT';
26 июн 16, 19:05    [19337321]     Ответить | Цитировать Сообщить модератору
 Re: Создание типа STRUCT  [new]
HOME_X
Member

Откуда:
Сообщений: 2548
HOME_X,

Если в целом, то необходимо вызвать функцию Java и вернуть список полей
Означенная функция бдует static функция type object. (если получится)
26 июн 16, 21:18    [19337645]     Ответить | Цитировать Сообщить модератору
 Re: Создание типа STRUCT  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
HOME_X
Если в целом, то необходимо вызвать функцию Java и вернуть список полей


Ну и чем oracle.sql.array не угодил?

SY.
26 июн 16, 23:26    [19338038]     Ответить | Цитировать Сообщить модератору
 Re: Создание типа STRUCT  [new]
HOME_X
Member

Откуда:
Сообщений: 2548
SY
Ну и чем oracle.sql.array не угодил?
SY.


Если Вы имеете в виду скажем следующий код
   public static ARRAY sortNumCaseList(oracle.sql.ARRAY list) throws SQLException, AccessControlException {
    Number[] n;
    n  = new Number[10];
    n[0]= (Number)5670;
    n[1]= (Number)5671;
    n[2]= (Number)5672;
    n[3]= (Number)5673;
    n[4]= (Number)5674;
    n[5]= (Number)5675;
    n[6]= (Number)5676;
    n[7]= (Number)5677;
    n[8]= (Number)5678;
    n[9]= (Number)5679;

    Connection conn = DriverManager.getConnection("jdbc:default:connection:");
    ArrayDescriptor arrayDescriptor = new ArrayDescriptor("NUMBERLIST",conn);
    ARRAY sorted = new ARRAY(arrayDescriptor,conn,((Object[])n));
    return sorted; 
    }


Здесь мне не очень нравиться,
- то что функция ссылается на базу Connection conn = DriverManager.getConnection("jdbc:default:connection:");
она будет находиться в базе, но без непосредственной связи (связь только через внешние параметры)
- здесь Array представлен одним типjv, а мне бы надо было три базовых типа (String,Number,Date)

Если можите предложить свой вариант реализации буду признателен за пример.

Спасибо

P.S. -может использовать STRUCT (но опять связь с базой ....)
27 июн 16, 01:17    [19338265]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить