crossplatform.ru

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


  Ответ в Oracle Procedure
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
crashsp Дата 16.11.2010, 15:33
  Еще раз спасибо за помощь
Буду знать...в прочем все таки альтернатива где то есть))буду искать
xls Дата 16.11.2010, 14:41
 
Цитата
qDecodeOCIType: unknown OCI datatype: 116
"ORA-00932: несовместимые типы данных: ожидается CHAR, получено DTYCWD
Unable to goto next"
C чем это связано?? и как с этим бороться ?

Видимо, все же функция, возвращающая курсор, не может быть использована для возврата записей в Qt обычным способом.
Если не принципиально, можно пойди в обход: создать таблицу со столбцами, соответствующими требуемым столбцам в возвращаемых записях ( полагаю, функция писалась все же не для того, чтобы выбрать все EMPLOYEE_ID из HR.EMPLOYEES ) и в теле функции заполнять эту таблицу, а потом считывать поля обычным SQL-запросом.
crashsp Дата 15.11.2010, 20:36
  Огромное спасибо за информацию !!
Пример скомпилился все окей, в Pl/Devolop отработал вернул курсор показал записи
но в Qt приложение выдал вот такую штуку

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


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

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

xls Дата 15.11.2010, 14:05
 
Цитата(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 Дата 13.11.2010, 17:22
  Невероятно рад что кто то откликнулся!!

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

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

Благодарю.....
xls Дата 13.11.2010, 14:18
  Пакет DBMS_OUTPUT, процедуру из которого ты использовал, предназаначен для вывода диагностических сообщений.
Если тебе надо вернуть набор записей, то нужно создавать не простую процедуру, а сложную функцию, возвращающую REFCURSOR.
А просмотреть вывод диагностических сообщений можно, например, в sqlplus после включения вывода "set serveroutput on" и вызова процедуры/функции.
crashsp Дата 12.11.2010, 10:51
  Доброго времени суток!
Создал простую процедуру в 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();  
    }

Нет ни чего, я думаю и не должно быть) ,ошибки при выполнение тоже нет.
Я думаю суть я донес,собственно вопрос: каким все таки способом можно получить результат ?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 20.4.2024, 6:11