Форум: "Базы";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];
Вниз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). Почему бы это? Ты все ошибки перечислил?
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.008 c