Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция Java возвращает массив, Функция Java возвращает массив 
:(
    Опции темы
romai
  Дата 19.11.2005, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 1.7.2005

Репутация: нет
Всего: нет



необходимо отправить в функцию массив и вернуть функцией массив.
для этого я создал 2 типа
Код
create or replace type mtp$Array$Number as table of number;

Код
create or replace type mtp$Array2$Number as table of mtp$Array$Number;

определяю функцию
Код
create or replace function fm(pK mtp$array2$number) return mtp$array2$number
  as language java name 'sKTZ.ResultPlan(oracle.sql.ARRAY[]) return oracle.sql.ARRAY[]';

как вернуть массив чисел в код PL/SQL , тип mtp$array2$number создан
чтобы отправлять массив в Java и принимать .
Ошибка - несовмесимость типов, приведение(из BigDecimal[] и int[] к oracle.sql.ARRAY[]) выполнить не удалось
Код
public class sKTZ
{
  public static oracle.sql.ARRAY[]  ResultPlan(oracle.sql.ARRAY[] pCOST)
  throws SQLException
  {
    int[][] xCOST = new int[2][2];
    xCOST[0] = (int[])pCOST[0].getArray();
    xCOST[1] = (int[])pCOST[1].getArray();

    return xCOST;
  }
}


Это сообщение отредактировал(а) LSD - 19.11.2005, 11:31
PM MAIL   Вверх
LSD
Дата 19.11.2005, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Так:
Код
create or replace and compile java source named ARRAY_JAVA as
import oracle.jdbc.OracleConnection;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.math.BigDecimal;

public class sKTZ
{
  public static ARRAY resultPlan(ARRAY array) throws SQLException
  {
    ARRAY[] arr = new ARRAY[array.length()];
    System.arraycopy(array.getArray(), 0, arr, 0, arr.length);

    BigDecimal[][] data = new BigDecimal[arr.length][];
    for(int i = 0; i < data.length; i++)
    {
      data[i] = new BigDecimal[arr[i].length()];
      int[] inta = arr[i].getIntArray();
      for(int j = 0; j < data[i].length; j++)
        data[i][j] = new BigDecimal(inta[j] * 100);
    }

    OracleConnection conn = (OracleConnection) DriverManager.getConnection("jdbc:default:connection:");
    ArrayDescriptor arrayDescriptor = array.getDescriptor();
    return new ARRAY(arrayDescriptor, conn, data);
  }
}


P.S. Теги code не надо было копировать из моего сообщения (я их написал через русскую о, чтобы они были видны тебе). Когда ты хочешь вставить код в сообщение, нажми сверху на комбобокс Код, выбери там нужный тип подсветки (SQL, Java и т.п.) и после этого вставляй код. Или если ты используешь IE или Firefox, то можешь просто выделить нужный участок кода и нажать на тот же комбобокс, код будет автоматом обрамлен тегами code.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
romai
Дата 20.11.2005, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 1.7.2005

Репутация: нет
Всего: нет



LCD - спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.