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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с параметром! (cursor), Нужно помощь! 
:(
    Опции темы
KISha
Дата 23.10.2008, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть процедура
Код

Pr1(numb in varchar2, m_array out paket.Typecur)
create or replace procedure Pr1( 
  numb in varchar,
  m_array out paket.Typecur)
 as
  pDepId number;
  pId number;
 begin
  select dp_id, id into pDepId, pId from t1
    where g.code = numb;
  open m_array for
   select nm, data, pasNum 
       from t2 // несколько строка
      where id= pDepId and id2=pId;
exception
  when others then
   open m_array for
    select 
     null as nm,
     null as data,
     null as pasNum
   from dual;
end ;

а  paket 
create or replace package body paket is
   type Typecur is ref cursor;
end paket;

Когда протестирую на Developer m_array  возвращает данный, 
нужно сделать так  на Java. 
Помогите решить эту проблему. smile 
Заранее спасибо!


M
LSD
Используем теги code !
Иначе в следующий раз тема отправится в мусорку.


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


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



ЧТО ЭТО ЗА НАБОР СИМВОЛОВ ?   smile  smile  smile 
PM MAIL   Вверх
KISha
Дата 23.10.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Samotnik я тебя не понял!
PM MAIL   Вверх
avvo
Дата 23.10.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

String query = "begin Pr1(?,?); end;";
CallableStatement st = conn.prepareCall(query);
st.registerOutParameter(2, OracleTypes.CURSOR);
st.setString(1, numb);
st.execute();
ResultSet rs = (ResultSet)st.getObject(1);
while (rs.next()) {
    System.out.println(rs.getString(1));
}
rs.close();
st.close();


Это сообщение отредактировал(а) avvo - 25.10.2008, 01:46
PM MAIL   Вверх
Samotnik
Дата 23.10.2008, 11:44 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Так это был  sql  ...    smile 
PM MAIL   Вверх
KISha
Дата 23.10.2008, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



avvo, дает такую ошибки

C:\Java\ORA\src\ORA.java:85: cannot find symbol
symbol  : variable OracleTypes
location: class ORA
st.registerOutParameter(2, OracleTypes.CURSOR);  smile 
                                           ^
PM MAIL   Вверх
KISha
Дата 24.10.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пож-та помогите решить проблему 
что за ошибка ?

Error to connect !!!java.sql.SQLException: В индексе отсутствует параметр IN или OUT:: 3


PM MAIL   Вверх
avvo
Дата 25.10.2008, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот так работает:

Код

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleResultSet;
import oracle.jdbc.OracleTypes;

public class Main {
    final static String driverClass    = "oracle.jdbc.OracleDriver";
    final static String connectionURL  = "jdbc:oracle:thin:@MYBASE:1521:ORCL";
    final static String userID         = "user";
    final static String userPassword   = "password";
    static Connection   con                   = null;
    static String sql = "begin SCHEMA_MY.PKG_MY.PROC_MY(?,?,?); end;";
 
    public static void main(String[] args) {
        try{

            OracleCallableStatement oraCallStmt   = null;
            OracleResultSet         myResultSet = null;
            Class.forName(driverClass).newInstance();
            con = DriverManager.getConnection(connectionURL, userID, userPassword);

            oraCallStmt = (OracleCallableStatement) con.prepareCall(sql);
            
            oraCallStmt.registerOutParameter(1, OracleTypes.CURSOR);
            oraCallStmt.registerOutParameter(2, OracleTypes.NUMBER);
            oraCallStmt.registerOutParameter(3, OracleTypes.VARCHAR);
            oraCallStmt.execute();

            myResultSet = (OracleResultSet) oraCallStmt.getCursor(1);

            while (myResultSet.next()) {
                System.out.println(
                    myResultSet.getString(1) + ", " + 
                    myResultSet.getString(2)
                );
            }
            System.out.println();
            myResultSet.close();
            oraCallStmt.close();



        } catch (Exception e)
        {
            e.printStackTrace();
        }
       
    }


}


У процедуры три параметра (IN OUT, OUT, OUT). Первый параметр - REF CURSOR.
Если есть IN параметры, то их устанавливают после всех registerOutParameter.
Все курсоры, которые открываются в вызываемых процедурах, нужно закрыть после использования.
Если что-то странно глючит и не работает (всякие ошибки типа неправильное количество параметров, превышение максимального размера данных и т.п., то скорее всего - глючный драйвер JDBC. У оракла 10.2 нормально работает к примеру только драйвер версии 10.2.0.4. Предыдущие (10.2.0.1-3) глючат.
PM MAIL   Вверх
KISha
Дата 25.10.2008, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот это ДА-а,  могу сказать супер!
avvo тебя спосибо!
Все получилась! 

PM MAIL   Вверх
KISha
Дата 25.10.2008, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно спросить еще,
а как можно отразить обычный out параметров?
proc (a out varchar2,b out varchar2, c in varchar2)
a, b – не REF CURSOR 
Заранее спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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