powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите разобраться с ХП
10 сообщений из 10, страница 1 из 1
Помогите разобраться с ХП
    #32634055
Maks_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть вот такая процедура как ее вызвать что получить ID
в связка BDE - ODBC - работает но не возвращает
из повербилдера работает но но выдает ошибку неправильный тип курсора

CREATE PROCEDURE dbo.Add_File

@sysfileid numeric(10) output,
@filename varchar(20),
@part_number integer,
@begindate datetime,
@enddate datetime,
@subsystem varchar(20),
@sequence_id varchar(128)
AS

BEGIN
insert into acceptfile values(@filename, @part_number, @begindate, @enddate, @subsystem, @sequence_id)
Select @sysfileid = @@identity
return @sysfileid
END
...
Рейтинг: 0 / 0
Помогите разобраться с ХП
    #32634067
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версию сервера будем угадывать?

А в общем случае, измени процедуру на:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE dbo.Add_File
  @filename varchar( 20 ),
  @part_number integer,
  @begindate datetime,
  @enddate datetime,
  @subsystem varchar( 20 ),
  @sequence_id varchar( 128 )
AS
BEGIN
  insert into acceptfile values(@filename, @part_number, @begindate, @enddate, @subsystem, @sequence_id)
  Select @@identity
END
...
Рейтинг: 0 / 0
Помогите разобраться с ХП
    #32634070
Фотография Raven A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Maks_f
Общие вопросы:
Версия PB? Тип DBMS (похоже ASE)? Версия DBMS ?
Текст сообщения?
Способ объявления процедуры (Declare, RPC) в PB?
Текст вызова и чтения возвращаемого значения?
Что дает вызов с консоли, например из isql?
...
Рейтинг: 0 / 0
Помогите разобраться с ХП
    #32634075
Maks_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASE 12
вызов проходит почемуто только так из под БДЕ
execute Add_File 333,'eee', 1, '2004-07-30', '2004-07-30', 'rt', ''

а так из повер билдера
execute Add_File 333,'eee', 1, '2004-07-30', '2004-07-30', 'rt', '';

ни чего не возвращает
...
Рейтинг: 0 / 0
Помогите разобраться с ХП
    #32634079
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maks_fASE 12
вызов проходит почемуто только так из под БДЕ
execute Add_File 333,'eee', 1, '2004-07-30', '2004-07-30', 'rt', ''

а так из повер билдера
execute Add_File 333,'eee', 1, '2004-07-30', '2004-07-30', 'rt', '';

ни чего не возвращает
А почему оно должно что-то возвращать?

У тебя есть два варианта получить результат - через output переменную или через резалт-сет. Тот вариант процедуры который ты показал предполагает возврат результата через output переменную. Она у тебя при этом стоит самой первой в списке. А при вызове, ты вместо переменной указываешь константу "333". Ну и где ты собственно говоря пытаешься прочитать результат?
...
Рейтинг: 0 / 0
Помогите разобраться с ХП
    #32634082
Maks_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый White Owl, я понимаю праведный гнев гуру, но подскажите пожалуйста, как вы бы написали процедуру в первом и во втором случае, или дайте пож ссылку где можно получить примеры написания процедур.
Заранее благодарен.
...
Рейтинг: 0 / 0
Помогите разобраться с ХП
    #32634098
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maks_fУважаемый White Owl, я понимаю праведный гнев гуру, но подскажите пожалуйста, как вы бы написали процедуру в первом и во втором случае, или дайте пож ссылку где можно получить примеры написания процедур.
Заранее благодарен.
Вариант процедуры для чтения результата при помощи курсора я уже написал - в самом-самом первом посте.
Вызов процедуры возвращающей результат через output параметр в общем случае будет:
execute Add_File SomeSpecialVariable,'eee', 1, '2004-07-30', '2004-07-30', 'rt', ''
По завершению процедуры результат будет в этой самой SomeSpecialVariable.
...
Рейтинг: 0 / 0
Помогите разобраться с ХП
    #32634101
Фотография Raven A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2White Owl
Извините, White Owl, что пытаюсь ответить на вопрос, заданный именно Вам.
2Maks_f
Полный ответ требует описания что Вам нужно, как и в каком контексте.

Вариант RPC вызова (самый простой, хотя окружение ... ):
- Создаете свой класс, наследуюясь от transaction, например my_n_tr
- В этом классе определяете новую Local External Function
(способ добавления зависит от версии PB) на основе Вашей процедуры Add_File
- В параметрах приложения (Variable Types)заменяете класс для SQLCA с transaction на my_n_tr
- в месте вызова, используете описанную ранее функцию просто как обычный метод класса my_n_tr. Например:
long ll_Result
decimal ldc_sysfileid
ll_Result = SQLCA.Add_File( ldc_sysfileid,'eee',1,'2004-07-30','2004-07-30', 'rt', '')
...

Вариант с Declare сложнее, но тоже возможен,
в качестве затравки отправляю Вас к Help'у по PB
( DECLARE Procedure embedded SQL statement)
К сожалению, Там не описанные тонкости чтения возвращаемого через return значения (в Вашем примере 'return @sysfileid' ) хотя и это возможно.
...
Рейтинг: 0 / 0
Помогите разобраться с ХП
    #32634105
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Raven_A: Да пожалуйста, пожалуйста :) Если бы он хотел получить ответ лично от меня - послал бы вопрос по e-mail. А если опубликовал в форуме значит отвечать кто угодно может.

А насчет "return @sysfileid" я честно говоря вообще сомневаюсь что ASE это поймет. Я не спец по ASE и не знаю как оно реагирует на return с параметром, но не так давно здесь были жалобы что на ASE нельзя сделать UDF...
...
Рейтинг: 0 / 0
Помогите разобраться с ХП
    #32640746
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlА насчет "return @sysfileid" я честно говоря вообще сомневаюсь что ASE это поймет.
Поймет, поймет. Только это не правильно, поскольку
0) @sysfileid будет преобразовано в int, и , возможно, урезано.
Коды возврата процедур всегда int.
1) код возврата хранимой процедуры в ASE должен использоваться для индикации успешности завершения процедуры, причем только 0 считается успешным завершением. Конечно, в конце концов, клиентское приложение или вызывающая процедура могут интерпретировать эти значения по-своему, но все же стандарт есть стандарт. Проблемы могут возникнуть, например, при неудаче вызова процедуры системного плана (например, если на сервере нет процедуры), тогда вернеться отрицательный код возврата.

Не понятно другое, зачем вообще так делать.

CREATE PROCEDURE dbo.Add_File
@sysfileid numeric(10) output,
-- видим, что @sysfileid объявлена как выходной параметр.
-- оно и так вернеться.
...
AS

-- я бы добавил
declare @rc int select @rc = 0

insert into acceptfile values(@filename, @part_number, @begindate, @enddate, @subsystem, @sequence_id)

-- и здесь было бы
Select @sysfileid = @@identity, @rc = case when @@rowcount = 1 then 0 else 1 end
return @rc

Тогда код возврата использовался бы по назначению, а идентификатор только что созданной записи возвращался бы через выходной параметр.

Кстати, чтобы получить выходной параметр, не забудьте объявить его выходным и на клиенте при вызове тоже, уж как это делать в PB я не знаю.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите разобраться с ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]