crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Oracle Procedure, Получить данные
crashsp
  опции профиля:
сообщение 12.11.2010, 10:51
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 23.10.2010
Пользователь №: 2144

Спасибо сказали: 8 раз(а)




Репутация:   546  


Доброго времени суток!
Создал простую процедуру в Oracle вот так :
create or replace procedure MyProc is
emp_id number;
CURSOR cur_emp IS
SELECT HR.Employees.EMPLOYEE_ID FROM HR.EMPLOYEES;
BEGIN
  OPEN cur_emp;
      LOOP
      
            FETCH cur_emp into emp_id;
           dbms_output.put_line('ID_EMPLOYEES :'||emp_id);

            EXIT WHEN cur_emp%NOTFOUND;  
      
      end LOOP;
      
      CLOSE cur_emp;
      
END MyProc;


Дальше в приложение Qt хочу получить ее результат пытаюсь сделать вот так :
    QSqlQuery query(m_db);
    query.exec("call MyProc()");
    
   while(query.next()){
         qDebug()<<query.value(0).toString();  
    }

Нет ни чего, я думаю и не должно быть) ,ошибки при выполнение тоже нет.
Я думаю суть я донес,собственно вопрос: каким все таки способом можно получить результат ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xls
  опции профиля:
сообщение 13.11.2010, 14:18
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 6.9.2010
Пользователь №: 2013

Спасибо сказали: 7 раз(а)




Репутация:   2  


Пакет DBMS_OUTPUT, процедуру из которого ты использовал, предназаначен для вывода диагностических сообщений.
Если тебе надо вернуть набор записей, то нужно создавать не простую процедуру, а сложную функцию, возвращающую REFCURSOR.
А просмотреть вывод диагностических сообщений можно, например, в sqlplus после включения вывода "set serveroutput on" и вызова процедуры/функции.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
crashsp
  опции профиля:
сообщение 13.11.2010, 17:22
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 23.10.2010
Пользователь №: 2144

Спасибо сказали: 8 раз(а)




Репутация:   546  


Невероятно рад что кто то откликнулся!!

Вот как раз под словом "результат" я и имел ввиду диагностические сообщения просто конкретно не сформулировал вопрос sorry,
то что я могу посмотреть в sqlplus это я знаю,но дело в том что мне надо это в моем приложение(редактор для себя) я знаю их куча
но есть время почему бы не заморочиться, решил так....

Есть идеи как вывести это дело ???
И еще был бы очень признателен если б в двух словах если это возможно ) пояснили как отобразить данные из курсора,я над этим еще даже не думал
а придется, видел на форумах что возникали такие проблеммы с отображение и ответов к сожелению не было.
Так же слышал что то про OTL какого ваше мнение ? следует тратить время на ее изучение или же все можно сделать и без нее ?

Благодарю.....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xls
  опции профиля:
сообщение 15.11.2010, 14:05
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 6.9.2010
Пользователь №: 2013

Спасибо сказали: 7 раз(а)




Репутация:   2  


Цитата(crashsp @ 13.11.2010, 17:22) *
Вот как раз под словом "результат" я и имел ввиду диагностические сообщения

Получить доступ к сообщениям, выводимым с помощью DBMS_OUTPUT через QSqlQuery нельзя.
Цитата
Есть идеи как вывести это дело ???
И еще был бы очень признателен если б в двух словах если это возможно ) пояснили как отобразить данные из курсора,я над этим еще даже не думал
а придется, видел на форумах что возникали такие проблеммы с отображение и ответов к сожелению не было.

SQL
create or replace
package hr_employees_package as type t_ref_cursor is ref cursor;
function myproc return t_ref_cursor;
end hr_employees_package;

create package body hr_employees_package as function myproc return t_ref_cursor
is
mycursor t_ref_cursor;
begin open mycursor for select EMPLOYEE_ID from HR.EMPLOYEES; return mycursor;
end MyProc;
end hr_employees_package;

Вызов, соответственно
SQL
select hr_employees_package.myproc from dual;

Цитата
Так же слышал что то про OTL какого ваше мнение ? следует тратить время на ее изучение или же все можно сделать и без нее ?

C OTL Вам лучше пока поверменить
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
crashsp
  опции профиля:
сообщение 15.11.2010, 20:36
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 23.10.2010
Пользователь №: 2144

Спасибо сказали: 8 раз(а)




Репутация:   546  


Огромное спасибо за информацию !!
Пример скомпилился все окей, в Pl/Devolop отработал вернул курсор показал записи
но в Qt приложение выдал вот такую штуку

qDecodeOCIType: unknown OCI datatype: 116
"ORA-00932: несовместимые типы данных: ожидается CHAR, получено DTYCWD
Unable to goto next"


C чем это связано?? и как с этим бороться ?

Благодарю....

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xls
  опции профиля:
сообщение 16.11.2010, 14:41
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 6.9.2010
Пользователь №: 2013

Спасибо сказали: 7 раз(а)




Репутация:   2  


Цитата
qDecodeOCIType: unknown OCI datatype: 116
"ORA-00932: несовместимые типы данных: ожидается CHAR, получено DTYCWD
Unable to goto next"
C чем это связано?? и как с этим бороться ?

Видимо, все же функция, возвращающая курсор, не может быть использована для возврата записей в Qt обычным способом.
Если не принципиально, можно пойди в обход: создать таблицу со столбцами, соответствующими требуемым столбцам в возвращаемых записях ( полагаю, функция писалась все же не для того, чтобы выбрать все EMPLOYEE_ID из HR.EMPLOYEES ) и в теле функции заполнять эту таблицу, а потом считывать поля обычным SQL-запросом.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
crashsp
  опции профиля:
сообщение 16.11.2010, 15:33
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 23.10.2010
Пользователь №: 2144

Спасибо сказали: 8 раз(а)




Репутация:   546  


Еще раз спасибо за помощь
Буду знать...в прочем все таки альтернатива где то есть))буду искать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 5.10.2022, 12:17