Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.03;
Скачать: CL | DM;

Вниз

Oracle 8 и Oracle 9   Найти похожие ветки 

 
nomad ©   (2004-02-03 13:06) [0]

Я написал отчет на Fastreport для Oracle 8 там вызываю процедуру у которой OUT параметр курсор, для Oracle 8 все работает, а на 9 пишет Ora06550 wronge number or types in call MyProc
Может кто знает как исправить.


 
Petr V. Abramov ©   (2004-02-03 13:13) [1]

А MyProc на 9 случаем не раскомпилировалась:)? STATUS у нее - valid?


 
nomad ©   (2004-02-03 13:22) [2]

вроде все нормально
а как это проверить?


 
nomad ©   (2004-02-03 13:31) [3]

Status valid


 
Reindeer Moss Eater ©   (2004-02-03 14:28) [4]

возвращаемый курсор содержит поля, которые не понимаются клиентом.


 
nomad ©   (2004-02-03 14:41) [5]

чего то я не опнял как это поля , которые не понимаются клиентом
и как это можно исправить?


 
Val ©   (2004-02-03 14:47) [6]

тип этого поля у вас на клиенте какой?


 
nomad ©   (2004-02-03 14:52) [7]

при чем сдесь тип поля .
процедура возвращает любой recordset в виде курсора


 
Reindeer Moss Eater ©   (2004-02-03 14:56) [8]

Ты наверное будешь удивлен, но в курсоре есть поля.
А у полей есть типы содержащихся в них данных.


 
Val ©   (2004-02-03 15:08) [9]

>nomad © (03.02.04 14:52) [7]
я неверно выразился - имелся ввиду тип параметра вызываемой процедуры.


 
nomad ©   (2004-02-04 10:24) [10]

get_scripts_names ( server in VARCHAR2,from_date in date , t_date in date ,cur out types.cursorType )
а type cursorType is ref cursor


 
Val ©   (2004-02-04 11:32) [11]

>nomad © (04.02.04 10:24) [10]
поймите, проблема на клиенте, ведь на сервере эта процедура наверняка нормально вызывается. Покажите параметры, их типы и вызов процедуры на клиенте.


 
nomad ©   (2004-02-04 11:38) [12]

вот вызов процедуры на клиенте
begin
get_scripts_names ( "qwe",TO_DATE("2004.02.04 00:00:00", "YYYY.MM.DD HH24:MI:SS"),to_date ("2004.02.04 23:59:59","yyyy.mm.dd hh24:mi:ss"));
end;


 
Val ©   (2004-02-04 11:42) [13]

так вы вызываете через query? тогда почему не указываете четвертый параметр?


 
Reindeer Moss Eater ©   (2004-02-04 11:42) [14]

На пальцах.
Процедура возвращает курсор.
Курсор построен селекте чего-то.
Это чего-то имеет свои типы данных, не имеющие никакого отношения к типам параметров процедуры.
С пониманием этих типов на клиенте возникли проблемы.
Так понятно?


 
Reindeer Moss Eater ©   (2004-02-04 11:45) [15]

Либо переданные параметры в процедуру используются в параметрах курсора и его where с этими параметрами конфликтует


 
nomad ©   (2004-02-04 11:45) [16]

если указать 4 параметр то command text do not return recordset


 
nomad ©   (2004-02-04 11:46) [17]

тогда почему на oracle 8 все работает,а на 9 нет


 
Reindeer Moss Eater ©   (2004-02-04 11:58) [18]

если указать 4 параметр то command text do not return recordset

У процедуры четвертый параметр - со значением по умолчанию.
Если его передать явно, условие where ничего не выбирает. (случай из [16])

Если его не передать, в where передается значение по умолчанию и тип этого умолчания не подходит для условия курсора.

тогда почему на oracle 8 все работает,а на 9 нет
Это как минимум два разных сервера, две разных процедуры и два разных курсора.


 
nomad ©   (2004-02-04 12:01) [19]

хорошо , но как тогда его передать чтобы не было command text do not return recordset

?


 
Reindeer Moss Eater ©   (2004-02-04 12:05) [20]

Ты не знаешь как передаются параметры?

Ты не видишь куда именно подставляется четвертый параметр в курсоре?

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


 
nomad ©   (2004-02-04 12:18) [21]

как написать вызов этой процедуры в Query чтобы все было правильно?
я не понимаю.


 
Reindeer Moss Eater ©   (2004-02-04 12:24) [22]

как написать вызов этой процедуры в Query чтобы все было правильно?

А разве уже сейчас что-то неправильно?
Передаешь параметры, курсор строится в соответствии с параметрами, курсор возвращается.


 
nomad ©   (2004-02-04 12:29) [23]

begin
get_scripts_names ( "qwe",TO_DATE("2004.02.04 00:00:00", "YYYY.MM.DD HH24:MI:SS"),to_date ("2004.02.04 23:59:59","yyyy.mm.dd hh24:mi:ss"));
end;
так не работает


 
Reindeer Moss Eater ©   (2004-02-04 12:31) [24]

так не работает

нет такого понятия "не работает".

Есть понятие "генерируется исключение с таким-то кодом"
Есть понятие "GetLastError вернул не нулевое значение"
и т.д.


 
Reindeer Moss Eater ©   (2004-02-04 12:33) [25]

И где наконец текст курсора?


 
nomad ©   (2004-02-04 13:38) [26]

Вот к примеру процедура :
create or replace procedure test( table_name in VARCHAR2,cur out types.cursorType )

as

SQLString varchar2(2000);
begin
SQLString:="select * from "||table_name;
OPEN cur FOR SQLString;
end;

Вот так я ее вызываю:
begin
test("test");
end;


 
Reindeer Moss Eater ©   (2004-02-04 15:06) [27]

Мы с утра про ошибки в ЭТОЙ твоей процедуре с ЭТИМ списком параметров и про ошибки в ЭТОМ курсоре разговариваем?

Нафик здесь твой "test" вообще?
Что бы научить форумчан писать хранимые процедуры и пользоваться курсорами?


 
nomad ©   (2004-02-04 15:14) [28]

да я просто хочу чтоб мне объяснили как правильно вызвать процедуру при помощи query ?
и никого я ни чему не учу.
мне просто нужен совет.


 
Reindeer Moss Eater ©   (2004-02-04 15:32) [29]

да я просто хочу чтоб мне объяснили как правильно вызвать процедуру при помощи query ?

Кто-то утверждал, что на восьмерке все работает.

мне просто нужен совет.

Отложи в сторону FastReport, Delphi и проч.
Открой PLSQL developer (или что там у тебя).
Вызови свою процедуру, пройдись по курсору, в общем протестируй это прямо на сервере


 
nomad ©   (2004-02-04 15:38) [30]

на сервере все работает и на восьмерке тоже


 
Reindeer Moss Eater ©   (2004-02-04 15:59) [31]

сравни типы данных у полей курсора на восьмерке и на девятке.


 
nomad ©   (2004-02-04 16:58) [32]

одинаковые


 
Reindeer Moss Eater ©   (2004-02-04 17:05) [33]

Если одно и то же приложение работает на одной и той же клиентской машине с двумя серверами и на девятке возникает ошибка и все что ты говоришь выше - правда, то это - чудо великое.
С большой буквы Ч.


 
nomad ©   (2004-02-04 17:14) [34]

вот клиентская машина разная :)


 
Reindeer Moss Eater ©   (2004-02-04 17:16) [35]

Ну дык:

1. Разные клиенты Оракла
2. Разные BDE или что там у тебя. С их разными парамерами подключения
3. Разные экземпляры программ.


 
nomad ©   (2004-02-04 17:24) [36]

спасибо за помощь!


 
Val ©   (2004-02-04 18:13) [37]

>nomad © (04.02.04 17:24) [36]
ну так скажите, что было, как решили-то?


 
nomad ©   (2004-02-04 18:50) [38]

следствие зашло в тупик
(с моей стороны:))


 
Reindeer Moss Eater ©   (2004-02-04 18:55) [39]

Какой нафик тупик?

Если имеем к примеру NUMBER(12,0) на сервере, и двух клиентов ожидающих ftInteger, но у одного ENABLE INTEGERS = TRUE а у другого наоборот, то у другого будет облом. Точнее не облом, а ftFloat.

Это еще в [4] было сказано.


 
Sergey13 ©   (2004-02-05 08:50) [40]

2Reindeer Moss Eater © (04.02.04 18:55) [39]
Если бы это было так, то ИМХО вылетала бы ощибка приложения, а тут имеем Ora06550, т.е. ошибку сервера.

2nomad © (03.02.04 13:06)
Кстати, у меня по документации (правда на 8.0.4 8-) у этого номера ошибки несколько другое название и толкование (Причина - произошла ошибка компиляции PL/SQL). Почему бы это? Ты все ошибки перечислил?


 
Reindeer Moss Eater ©   (2004-02-05 10:26) [41]

Sergey13 ©

Я не диагноз ставил.

Если имеем к примеру NUMBER(12,0) ....


 
Reindeer Moss Eater ©   (2004-02-05 10:28) [42]

Кстати, у меня по документации (правда на 8.0.4 8-) у этого номера ошибки несколько другое название и толкование (Причина - произошла ошибка компиляции PL/SQL). Почему бы это? Ты все ошибки перечислил?

Ошибка компиляции отпадает. см. совет автору в [29] и его ответ в [30]


 
nomad ©   (2004-02-05 10:30) [43]

2Sergey13 © (05.02.04 08:50)
ошибка тока одна Ora06550


 
Sergey13 ©   (2004-02-05 10:41) [44]

2Reindeer Moss Eater © (05.02.04 10:26) [41]
Я просто написал свое ИМХО на твой пример. 8-)

2Reindeer Moss Eater © (05.02.04 10:28) [42]
>Ошибка компиляции отпадает.
Я просто переписал выдержку из документации по Ora06550.

2nomad © (05.02.04 10:30) [43]
А где описан твой (cur out types.cursorType)? Такие вещи вроде только в пакете можно делать, где в описательной части описывается собственно курсор(создается тип), а теле процедуры он только заполняется. Может у тебя тут где то нестыковка? Хотя может я и ошибаюсь.


 
Reindeer Moss Eater ©   (2004-02-05 10:44) [45]

Если верить автору, то проблема заключается в нестыковке клиента и сервера по типам данных на второй машине.

Ведь вызов процедуры и работа с курсором в plsl блоке идет нормально и на девятке и на восьмерке.


 
nomad ©   (2004-02-05 10:50) [46]

вот пакет
package types
as
type cursorType is ref cursor;
end;

скорее всего Reindeer Moss Eater © (05.02.04 10:44) [45] прав

> Если верить автору, то проблема заключается в нестыковке
> клиента и сервера по типам данных на второй машине.


 
Sergey13 ©   (2004-02-05 10:52) [47]

2Reindeer Moss Eater © (05.02.04 10:44) [45]
А я понял, что разница в серверах 8 и 9. И поскольку сервера разные, то и процедуры могут отличаться.


 
Val ©   (2004-02-05 10:54) [48]

>nomad © (05.02.04 10:30) [43]
скажите, также какими компонентами доступа к БД вы оперируете


 
nomad ©   (2004-02-05 11:00) [49]


> Val © (05.02.04 10:54) [48]
Delphi5 , FastReport 2.5 ADoQuery


 
Reindeer Moss Eater ©   (2004-02-05 11:02) [50]

А я понял, что разница в серверах 8 и 9. И поскольку сервера разные, то и процедуры могут отличаться.

Даже если они и отличаются, ошибка рождается не в процедуре, иначе бы она и на сервере не работала.
А она работает там без ошибок ([30])


 
Sergey13 ©   (2004-02-05 11:10) [51]

2nomad © (05.02.04 10:50) [46]
А какой тип у возврашаемого курсора?
Давно это было, но помнится я делал на 8 примерно так:
cursor tkv is
select * from my_table;
type tkv_rec is ref cursor return tkv%ROWTYPE;

Можно и без описания tkv (у меня в жизни там был сложный селект по нескольким таблам), а дать My_Table%ROWTYPE если по одной таблице.


 
Reindeer Moss Eater ©   (2004-02-05 11:15) [52]

Короче.

Идем на машину, на которой отчет работает.
Переключаем на этой машине программу на сервер с девяткой.
Если работает, то причина в настройках клиента Оракла на второй машине.
Если не работает - причина в разных процедурах разных курсорах и разных объектах по которым курсор строится.

Такая кофейная гуща как правило эффективна.


 
nomad ©   (2004-02-05 11:18) [53]

2Sergey13 © (05.02.04 11:10) [51]

у меня никак не определен тип возвращаемого курсора:)
но ведь работает


 
nomad ©   (2004-02-05 11:20) [54]

2 Reindeer Moss Eater © (05.02.04 11:15) [52]
я так и хочу попробывать



Страницы: 1 2 вся ветка

Текущий архив: 2004.03.03;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.018 c
1-6053
Di
2004-02-18 15:25
2004.03.03
Программные требования


1-6087
Тимохов
2004-02-19 12:24
2004.03.03
Вопрос по OLE


14-6231
Undert
2004-02-10 18:48
2004.03.03
TClientSocket + POST


3-5981
Lisa
2004-02-04 13:55
2004.03.03
в DBGrid не работает мышинный скроллинг


9-5931
dimodim
2003-08-18 08:00
2004.03.03
Как в ЖЛСцене сделать прорисовку На их таймере